PureBasic
PureBasic
SFTP use Cert's Private Key from PFX (.pfx/.p12)
See more SFTP Examples
Demonstrates how to use the private key associated with a certificate from a .pfx/.p12 file.Chilkat PureBasic Downloads
IncludeFile "CkSshKey.pb"
IncludeFile "CkCert.pb"
IncludeFile "CkPrivateKey.pb"
IncludeFile "CkSFtp.pb"
Procedure ChilkatExample()
success.i = 0
; This example assumes the Chilkat API to have been previously unlocked.
; See Global Unlock Sample for sample code.
cert.i = CkCert::ckCreate()
If cert.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
pfxFilepath.s = "qa_data/pfx/my.pfx"
pfxPassword.s = "secret"
; A PFX typically contains certificates in the chain of authentication.
; The Chilkat cert object will choose the certificate w/
; private key farthest from the root authority cert.
; To access all the certificates in a PFX, use the
; Chilkat certificate store object instead.
success = CkCert::ckLoadPfxFile(cert,pfxFilepath,pfxPassword)
If success = 0
Debug CkCert::ckLastErrorText(cert)
CkCert::ckDispose(cert)
ProcedureReturn
EndIf
; Get the private key.
privKey.i = CkPrivateKey::ckCreate()
If privKey.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
success = CkCert::ckGetPrivateKey(cert,privKey)
If success = 0
Debug CkCert::ckLastErrorText(cert)
CkCert::ckDispose(cert)
CkPrivateKey::ckDispose(privKey)
ProcedureReturn
EndIf
privKeyPem.s = CkPrivateKey::ckGetPkcs8Pem(privKey)
If CkPrivateKey::ckLastMethodSuccess(privKey) = 0
Debug CkPrivateKey::ckLastErrorText(privKey)
CkCert::ckDispose(cert)
CkPrivateKey::ckDispose(privKey)
ProcedureReturn
EndIf
sshKey.i = CkSshKey::ckCreate()
If sshKey.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
success = CkSshKey::ckFromOpenSshPrivateKey(sshKey,privKeyPem)
If success = 0
Debug CkSshKey::ckLastErrorText(sshKey)
CkCert::ckDispose(cert)
CkPrivateKey::ckDispose(privKey)
CkSshKey::ckDispose(sshKey)
ProcedureReturn
EndIf
; Connect to an SSH/SFTP server
sftp.i = CkSFtp::ckCreate()
If sftp.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
success = CkSFtp::ckConnect(sftp,"sftp.example.com",22)
If success = 0
Debug CkSFtp::ckLastErrorText(sftp)
CkCert::ckDispose(cert)
CkPrivateKey::ckDispose(privKey)
CkSshKey::ckDispose(sshKey)
CkSFtp::ckDispose(sftp)
ProcedureReturn
EndIf
; 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::ckAuthenticatePk(sftp,"mySshLogin",sshKey)
If success = 0
Debug CkSFtp::ckLastErrorText(sftp)
CkCert::ckDispose(cert)
CkPrivateKey::ckDispose(privKey)
CkSshKey::ckDispose(sshKey)
CkSFtp::ckDispose(sftp)
ProcedureReturn
EndIf
Debug "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::ckDispose(cert)
CkPrivateKey::ckDispose(privKey)
CkSshKey::ckDispose(sshKey)
CkSFtp::ckDispose(sftp)
ProcedureReturn
EndProcedure