Unicode C
Unicode C
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 Unicode C Downloads
#include <C_CkFtp2W.h>
#include <C_CkCertStoreW.h>
#include <C_CkJsonObjectW.h>
#include <C_CkCertW.h>
void ChilkatSample(void)
{
BOOL success;
HCkFtp2W ftp;
HCkCertStoreW certStore;
const wchar_t *password;
HCkJsonObjectW jsonCN;
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");
CkFtp2W_putPort(ftp,21);
CkFtp2W_putUsername(ftp,L"test");
CkFtp2W_putPassword(ftp,L"test");
// This example will use explict TLS/SSL.
// Establish an explicit secure channel after connection
// on the standard FTP port 21.
CkFtp2W_putAuthTls(ftp,TRUE);
// The Ssl property is for establishing an implicit SSL connection
// on port 990. Because this example uses explicit SSL, it
// should remain FALSE.
CkFtp2W_putSsl(ftp,FALSE);
// Load a certificate from a .pfx
// A PFX may contain several certs, including the certificates
// in a chain of authority.
certStore = CkCertStoreW_Create();
password = L"***";
// Load the certs from a PFX into an in-memory certificate store:
success = CkCertStoreW_LoadPfxFile(certStore,L"chilkat.pfx",password);
if (success != TRUE) {
wprintf(L"%s\n",CkCertStoreW_lastErrorText(certStore));
CkFtp2W_Dispose(ftp);
CkCertStoreW_Dispose(certStore);
return;
}
// Find the desired certificate.
jsonCN = CkJsonObjectW_Create();
CkJsonObjectW_UpdateString(jsonCN,L"CN",L"cert common name");
cert = CkCertW_Create();
success = CkCertStoreW_FindCert(certStore,jsonCN,cert);
if (success == FALSE) {
wprintf(L"Certificate not found!\n");
CkFtp2W_Dispose(ftp);
CkCertStoreW_Dispose(certStore);
CkJsonObjectW_Dispose(jsonCN);
CkCertW_Dispose(cert);
return;
}
// Use this certificate for our secure (SSL/TLS) connection:
success = CkFtp2W_SetSslClientCert(ftp,cert);
// Connect and login to the FTP server. The connection is
// made secure because of the AuthTls setting.
success = CkFtp2W_Connect(ftp);
if (success != TRUE) {
wprintf(L"%s\n",CkFtp2W_lastErrorText(ftp));
CkFtp2W_Dispose(ftp);
CkCertStoreW_Dispose(certStore);
CkJsonObjectW_Dispose(jsonCN);
CkCertW_Dispose(cert);
return;
}
else {
// LastErrorText contains information even when
// successful. This allows you to visually verify
// that the secure connection actually occurred.
wprintf(L"%s\n",CkFtp2W_lastErrorText(ftp));
}
wprintf(L"Secure FTP Channel Established!\n");
// Do whatever you're doing to do ...
// upload files, download files, etc...
// .....
// .....
success = CkFtp2W_Disconnect(ftp);
CkFtp2W_Dispose(ftp);
CkCertStoreW_Dispose(certStore);
CkJsonObjectW_Dispose(jsonCN);
CkCertW_Dispose(cert);
}