Sample code for 30+ languages & platforms
Swift

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()

}