Delphi DLL
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
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;