Sample code for 30+ languages & platforms
Lianja

FTPS with Mutual TLS Authentication (TLS Client Certificate)

See more FTP Examples

Demonstrates how to do mutual TLS authentication (using a client certificate from a .pfx/.p12).

Chilkat Lianja Downloads

Lianja
llSuccess = .F.

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

loFtp = createobject("CkFtp2")

loFtp.Hostname = "ftp.example.com"
loFtp.Port = 21

// If using implicit TLS, you probably want port 990..
loFtp.Port = 990

// Set this to .F. for implicit TLS, otherwise set to .T. for explicit TLS (where port is typically 21).
loFtp.AuthTls = .F.

// Set this to .T. for implicit TLS, otherwise set to .F..
loFtp.Ssl = .T.

loCert = createobject("CkCert")
llSuccess = loCert.LoadPfxFile("qa_data/pfx/example.pfx","pfx_password")
if (llSuccess = .F.) then
    ? loCert.LastErrorText
    release loFtp
    release loCert
    return
endif

// Use this certificate for our TLS mutually authenticated connection:
llSuccess = loFtp.SetSslClientCert(loCert)
if (llSuccess = .F.) then
    ? loCert.LastErrorText
    release loFtp
    release loCert
    return
endif

// Establish the TLS connection with the FTP server.
llSuccess = loFtp.ConnectOnly()
if (llSuccess = .F.) then
    ? loFtp.LastErrorText
    release loFtp
    release loCert
    return
endif

// If a login is required, then login with the FTP account login/password.
loFtp.Username = "myLogin"
loFtp.Password = "myPassword"
llSuccess = loFtp.LoginAfterConnectOnly()
if (llSuccess = .F.) then
    ? loFtp.LastErrorText
    release loFtp
    release loCert
    return
endif

// Do whatever you're doing to do ...
// upload files, download files, etc...

// .....
// .....

llSuccess = loFtp.Disconnect()


release loFtp
release loCert