Sample code for 30+ languages & platforms
Lianja

SSL Client Certificate

See more Socket/SSL/TLS Examples

Demonstrates how to connect to an SSL server using a client-side certificate, send a simple message, receive a simple response, and disconnect.

Chilkat Lianja Downloads

Lianja
llSuccess = .F.

// This example requires the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.

loSocket = createobject("CkSocket")

// Create an instance of a certificate store object, load a PFX file,
// locate the certificate we need, and use it for signing.
// (a PFX file may contain more than one certificate.)
loCertStore = createobject("CkCertStore")
// The 1st argument is the filename, the 2nd arg is the 
// PFX file's password:
llSuccess = loCertStore.LoadPfxFile("chilkat_secret.pfx","secret")
if (llSuccess <> .T.) then
    ? loCertStore.LastErrorText
    release loSocket
    release loCertStore
    return
endif

// Find the certificate by the subject common name:
loJsonCN = createobject("CkJsonObject")
loJsonCN.UpdateString("CN","cert common name")

loCert = createobject("CkCert")
llSuccess = loCertStore.FindCert(loJsonCN,loCert)
if (llSuccess = .F.) then
    ? loCertStore.LastErrorText
    release loSocket
    release loCertStore
    release loJsonCN
    release loCert
    return
endif

llSuccess = loSocket.SetSslClientCert(loCert)

llSsl = .T.
lnMaxWaitMillisec = 20000

// The SSL server hostname may be an IP address, a domain name,
// or "localhost".  You'll need to change this:

lcSslServerHost = "123.123.88.88"
lnSslServerPort = 8123

// Connect to the SSL server:
llSuccess = loSocket.Connect(lcSslServerHost,lnSslServerPort,llSsl,lnMaxWaitMillisec)
if (llSuccess <> .T.) then
    ? loSocket.LastErrorText
    release loSocket
    release loCertStore
    release loJsonCN
    release loCert
    return
endif

// Set maximum timeouts for reading an writing (in millisec)
loSocket.MaxReadIdleMs = 20000
loSocket.MaxSendIdleMs = 20000

// Send a "Hello Server! -EOM-" message:
llSuccess = loSocket.SendString("Hello Server! -EOM-")
if (llSuccess <> .T.) then
    ? loSocket.LastErrorText
    release loSocket
    release loCertStore
    release loJsonCN
    release loCert
    return
endif

// The server (in this example) is going to send a "Hello Client! -EOM-" 
// message.  Read it:
lcReceivedMsg = loSocket.ReceiveUntilMatch("-EOM-")
if (loSocket.LastMethodSuccess <> .T.) then
    ? loSocket.LastErrorText
    release loSocket
    release loCertStore
    release loJsonCN
    release loCert
    return
endif

// Close the connection with the server
// Wait a max of 20 seconds (20000 millsec)
llSuccess = loSocket.Close(20000)

? lcReceivedMsg


release loSocket
release loCertStore
release loJsonCN
release loCert