Sample code for 30+ languages & platforms
Swift Requires Chilkat v10.1.2+

Secure FTP with Client Certificate

See more FTP Examples

Chilkat FTP2 provides the ability to use a client certificate with secure FTP (implicit or explicit SSL/TLS). This example demonstrates how to load a certificate from a .pfx and use it as the client-side SSL cert. Note: Client-side certificates are only needed in situations where the server demands one.

Chilkat Swift Downloads

Swift

func chilkatTest() {
    var success: Bool = false

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

    let ftp = CkoFtp2()!

    ftp.hostname = "ftp.example.com"
    ftp.port = 21
    ftp.username = "test"
    ftp.password = "test"

    //  This example will use explict TLS/SSL.
    //  Establish an explicit secure channel after connection
    //  on the standard FTP port 21.
    ftp.authTls = true

    //  The Ssl property is for establishing an implicit SSL connection
    //  on port 990.  Because this example uses explicit SSL, it 
    //  should remain false.
    ftp.ssl = false

    //  Load a certificate from a .pfx
    //  A PFX may contain several certs, including the certificates
    //  in a chain of authority.
    let certStore = CkoCertStore()!
    var password: String?
    password = "***"
    //  Load the certs from a PFX into an in-memory certificate store:
    success = certStore.loadPfxFile(path: "chilkat.pfx", password: password)
    if success != true {
        print("\(certStore.lastErrorText!)")
        return
    }

    //  Find the desired certificate.
    let jsonCN = CkoJsonObject()!
    jsonCN.updateString(jsonPath: "CN", value: "cert common name")

    let cert = CkoCert()!
    success = certStore.findCert(json: jsonCN, cert: cert)
    if success == false {
        print("Certificate not found!")
        return
    }

    //  Use this certificate for our secure (SSL/TLS) connection:
    success = ftp.setSslClientCert(cert: cert)

    //  Connect and login to the FTP server.  The connection is 
    //  made secure because of the AuthTls setting.
    success = ftp.connect()
    if success != true {
        print("\(ftp.lastErrorText!)")
        return
    }
    else {
        //  LastErrorText contains information even when
        //  successful. This allows you to visually verify
        //  that the secure connection actually occurred.
        print("\(ftp.lastErrorText!)")
    }

    print("Secure FTP Channel Established!")

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

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

    success = ftp.disconnect()

}