Sample code for 30+ languages & platforms
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 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");

    // 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_LoadByCommonName(cert,"The common name of your certificate");
    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);

    }