Sample code for 30+ languages & platforms
Dart Requires Chilkat v10.1.2+

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

Dart
import 'package:chilkat/chilkat.dart';

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

  final ftp = CkFtp2();

  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.
  final certStore = CkCertStore();
  final password = '***';
  // Load the certs from a PFX into an in-memory certificate store:
  try {
    certStore.loadPfxFile('chilkat.pfx', password);
  } on ChilkatException catch (e) {
    print(e.lastErrorText);
    return;
  }

  // Find the desired certificate.
  final jsonCN = CkJsonObject();
  jsonCN.updateString('CN', 'cert common name');

  final cert = CkCert();
  try {
    certStore.findCert(jsonCN, cert);
  } on ChilkatException {
    print('Certificate not found!');
    return;
  }

  // Use this certificate for our secure (SSL/TLS) connection:
  ftp.setSslClientCert(cert);

  // Connect and login to the FTP server.  The connection is 
  // made secure because of the AuthTls setting.
  try {
    ftp.connect();
    // LastErrorText contains information even when
    // successful. This allows you to visually verify
    // that the secure connection actually occurred.
    print(ftp.lastErrorText);
  } on ChilkatException catch (e) {
    print(e.lastErrorText);
    return;
  }

  print('Secure FTP Channel Established!');

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

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

  ftp.disconnect();
}