Sample code for 30+ languages & platforms
PureBasic

FTP Connect, Examine Server Certificate, and then Authenticate

See more FTP Examples

Demonstrates how to connect to an FTP server, examine the server's SSL/TLS certificate, and then, if it meets the application's security requirements, proceed to authenticate.

Chilkat PureBasic Downloads

PureBasic
IncludeFile "CkFtp2.pb"
IncludeFile "CkCert.pb"

Procedure ChilkatExample()

    success.i = 0

    ; This example assumes Chilkat Ftp2 to have been previously unlocked.
    ; See Unlock Ftp2 for sample code.

    ftp.i = CkFtp2::ckCreate()
    If ftp.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    CkFtp2::setCkHostname(ftp, "www.authtls-ftps-server.com")
    CkFtp2::setCkUsername(ftp, "FTP_LOGIN")
    CkFtp2::setCkPassword(ftp, "FTP_PASSWORD")
    CkFtp2::setCkAuthTls(ftp, 1)
    CkFtp2::setCkPort(ftp, 21)

    ; Connect to the FTP server using explicit TLS (AUTH TLS).
    success = CkFtp2::ckConnectOnly(ftp)
    If success = 0
        Debug CkFtp2::ckLastErrorText(ftp)
        CkFtp2::ckDispose(ftp)
        ProcedureReturn
    EndIf

    ; Get the FTP server's certificate.
    serverCert.i = CkCert::ckCreate()
    If serverCert.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    success = CkFtp2::ckGetServerCert(ftp,serverCert)
    If success = 0
        Debug CkFtp2::ckLastErrorText(ftp)
        CkFtp2::ckDispose(ftp)
        CkCert::ckDispose(serverCert)
        ProcedureReturn
    EndIf

    ; Now that we have the certificate, we can check it in any way we desire.
    ; (See the online reference documentation for the certificate object's methods
    ; and properties)...

    ; Assuming the certificate is OK, proceed to authenticate with the FTP server.
    success = CkFtp2::ckLoginAfterConnectOnly(ftp)
    If success = 0
        Debug CkFtp2::ckLastErrorText(ftp)
        CkFtp2::ckDispose(ftp)
        CkCert::ckDispose(serverCert)
        ProcedureReturn
    EndIf

    ; 
    ; Proceed with uploading/download files, etc...
    ; 

    CkFtp2::ckDisconnect(ftp)
    Debug "Success."


    CkFtp2::ckDispose(ftp)
    CkCert::ckDispose(serverCert)


    ProcedureReturn
EndProcedure