Sample code for 30+ languages & platforms
C

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 C Downloads

C
#include <C_CkFtp2.h>
#include <C_CkCert.h>

void ChilkatSample(void)
    {
    BOOL success;
    HCkFtp2 ftp;
    HCkCert cert;

    success = FALSE;

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

    ftp = CkFtp2_Create();

    CkFtp2_putHostname(ftp,"ftp.example.com");
    CkFtp2_putPort(ftp,21);

    // If using implicit TLS, you probably want port 990..
    CkFtp2_putPort(ftp,990);

    // Set this to FALSE for implicit TLS, otherwise set to TRUE for explicit TLS (where port is typically 21).
    CkFtp2_putAuthTls(ftp,FALSE);

    // Set this to TRUE for implicit TLS, otherwise set to FALSE.
    CkFtp2_putSsl(ftp,TRUE);

    cert = CkCert_Create();
    success = CkCert_LoadPfxFile(cert,"qa_data/pfx/example.pfx","pfx_password");
    if (success == FALSE) {
        printf("%s\n",CkCert_lastErrorText(cert));
        CkFtp2_Dispose(ftp);
        CkCert_Dispose(cert);
        return;
    }

    // Use this certificate for our TLS mutually authenticated connection:
    success = CkFtp2_SetSslClientCert(ftp,cert);
    if (success == FALSE) {
        printf("%s\n",CkCert_lastErrorText(cert));
        CkFtp2_Dispose(ftp);
        CkCert_Dispose(cert);
        return;
    }

    // Establish the TLS connection with the FTP server.
    success = CkFtp2_ConnectOnly(ftp);
    if (success == FALSE) {
        printf("%s\n",CkFtp2_lastErrorText(ftp));
        CkFtp2_Dispose(ftp);
        CkCert_Dispose(cert);
        return;
    }

    // If a login is required, then login with the FTP account login/password.
    CkFtp2_putUsername(ftp,"myLogin");
    CkFtp2_putPassword(ftp,"myPassword");
    success = CkFtp2_LoginAfterConnectOnly(ftp);
    if (success == FALSE) {
        printf("%s\n",CkFtp2_lastErrorText(ftp));
        CkFtp2_Dispose(ftp);
        CkCert_Dispose(cert);
        return;
    }

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

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

    success = CkFtp2_Disconnect(ftp);


    CkFtp2_Dispose(ftp);
    CkCert_Dispose(cert);

    }