Sample code for 30+ languages & platforms
Unicode C

FTPS with Client Cert from Windows Certificate Store

See more FTP Examples

Demonstrates how to do mutual TLS authentication using a client certificate installed in the Windows certificate store.

Chilkat Unicode C Downloads

Unicode C
#include <C_CkFtp2W.h>
#include <C_CkCertW.h>

void ChilkatSample(void)
    {
    BOOL success;
    HCkFtp2W ftp;
    HCkCertW cert;

    success = FALSE;

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

    ftp = CkFtp2W_Create();

    CkFtp2W_putHostname(ftp,L"ftp.example.com");

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

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

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

    cert = CkCertW_Create();
    success = CkCertW_LoadByCommonName(cert,L"The common name of your certificate");
    if (success == FALSE) {
        wprintf(L"%s\n",CkCertW_lastErrorText(cert));
        CkFtp2W_Dispose(ftp);
        CkCertW_Dispose(cert);
        return;
    }

    // Use this certificate for our TLS mutually authenticated connection:
    success = CkFtp2W_SetSslClientCert(ftp,cert);
    if (success == FALSE) {
        wprintf(L"%s\n",CkCertW_lastErrorText(cert));
        CkFtp2W_Dispose(ftp);
        CkCertW_Dispose(cert);
        return;
    }

    // Establish the TLS connection with the FTP server.
    success = CkFtp2W_ConnectOnly(ftp);
    if (success == FALSE) {
        wprintf(L"%s\n",CkFtp2W_lastErrorText(ftp));
        CkFtp2W_Dispose(ftp);
        CkCertW_Dispose(cert);
        return;
    }

    // If a login is required, then login with the FTP account login/password.
    CkFtp2W_putUsername(ftp,L"myLogin");
    CkFtp2W_putPassword(ftp,L"myPassword");
    success = CkFtp2W_LoginAfterConnectOnly(ftp);
    if (success == FALSE) {
        wprintf(L"%s\n",CkFtp2W_lastErrorText(ftp));
        CkFtp2W_Dispose(ftp);
        CkCertW_Dispose(cert);
        return;
    }

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

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

    success = CkFtp2W_Disconnect(ftp);


    CkFtp2W_Dispose(ftp);
    CkCertW_Dispose(cert);

    }