Sample code for 30+ languages & platforms
Delphi DLL

SFTP use Cert's Private Key for Authentication (Windows)

See more SFTP Examples

Demonstrates how to use the private key of a pre-installed certificate (on Windows) for SFTP authentication. The certificate's private key must be marked as "exportable" when originally installed.

Chilkat Delphi DLL Downloads

Delphi DLL
uses
    Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
    Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, SshKey, PrivateKey, Cert, SFtp;

...

procedure TForm1.Button1Click(Sender: TObject);
var
success: Boolean;
cert: HCkCert;
privKey: HCkPrivateKey;
privKeyPem: PWideChar;
sshKey: HCkSshKey;
sftp: HCkSFtp;

begin
success := False;

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

cert := CkCert_Create();

// Load the certificate from the Windows certificate store
success := CkCert_LoadByCommonName(cert,'my_cert_common_name');
if (success = False) then
  begin
    Memo1.Lines.Add(CkCert__lastErrorText(cert));
    Exit;
  end;

// Get the private key.  
privKey := CkPrivateKey_Create();
success := CkCert_GetPrivateKey(cert,privKey);
if (success = False) then
  begin
    Memo1.Lines.Add(CkCert__lastErrorText(cert));
    Exit;
  end;

privKeyPem := CkPrivateKey__getPkcs8Pem(privKey);
if (CkPrivateKey_getLastMethodSuccess(privKey) = False) then
  begin
    Memo1.Lines.Add(CkPrivateKey__lastErrorText(privKey));
    Exit;
  end;

sshKey := CkSshKey_Create();
success := CkSshKey_FromOpenSshPrivateKey(sshKey,privKeyPem);
if (success = False) then
  begin
    Memo1.Lines.Add(CkSshKey__lastErrorText(sshKey));
    Exit;
  end;

// Connect to an SSH/SFTP server
sftp := CkSFtp_Create();
success := CkSFtp_Connect(sftp,'sftp.example.com',22);
if (success = False) then
  begin
    Memo1.Lines.Add(CkSFtp__lastErrorText(sftp));
    Exit;
  end;

// Authenticate with the SSH server using a username + private key.
// (The private key serves as the password.  The username identifies
// the SSH user account on the server.)
success := CkSFtp_AuthenticatePk(sftp,'mySshLogin',sshKey);
if (success = False) then
  begin
    Memo1.Lines.Add(CkSFtp__lastErrorText(sftp));
    Exit;
  end;

Memo1.Lines.Add('OK, the connection and authentication with the SSH server is completed.');

// This example is only to show the connection + authentication using a private key associated with a certificate in the Windows certificate store...

CkCert_Dispose(cert);
CkPrivateKey_Dispose(privKey);
CkSshKey_Dispose(sshKey);
CkSFtp_Dispose(sftp);

end;