Go
Go
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 Go Downloads
success := false
// This example requires the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.
ftp := chilkat.NewFtp2()
ftp.SetHostname("ftp.example.com")
ftp.SetPort(21)
ftp.SetUsername("test")
ftp.SetPassword("test")
// This example will use explict TLS/SSL.
// Establish an explicit secure channel after connection
// on the standard FTP port 21.
ftp.SetAuthTls(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.SetSsl(false)
// Load a certificate from a .pfx
// A PFX may contain several certs, including the certificates
// in a chain of authority.
certStore := chilkat.NewCertStore()
var password string
password = "***"
// Load the certs from a PFX into an in-memory certificate store:
success = certStore.LoadPfxFile("chilkat.pfx",password)
if success != true {
fmt.Println(certStore.LastErrorText())
ftp.DisposeFtp2()
certStore.DisposeCertStore()
return
}
// Find the desired certificate.
jsonCN := chilkat.NewJsonObject()
jsonCN.UpdateString("CN","cert common name")
cert := chilkat.NewCert()
success = certStore.FindCert(jsonCN,cert)
if success == false {
fmt.Println("Certificate not found!")
ftp.DisposeFtp2()
certStore.DisposeCertStore()
jsonCN.DisposeJsonObject()
cert.DisposeCert()
return
}
// Use this certificate for our secure (SSL/TLS) connection:
success = ftp.SetSslClientCert(cert)
// Connect and login to the FTP server. The connection is
// made secure because of the AuthTls setting.
success = ftp.Connect()
if success != true {
fmt.Println(ftp.LastErrorText())
ftp.DisposeFtp2()
certStore.DisposeCertStore()
jsonCN.DisposeJsonObject()
cert.DisposeCert()
return
} else {
// LastErrorText contains information even when
// successful. This allows you to visually verify
// that the secure connection actually occurred.
fmt.Println(ftp.LastErrorText())
}
fmt.Println("Secure FTP Channel Established!")
// Do whatever you're doing to do ...
// upload files, download files, etc...
// .....
// .....
success = ftp.Disconnect()
ftp.DisposeFtp2()
certStore.DisposeCertStore()
jsonCN.DisposeJsonObject()
cert.DisposeCert()