Sample code for 30+ languages & platforms
PureBasic

Use a Custom Set of Trusted Root Certificates

See more Certificates Examples

Demonstrates how to build a set of trusted root certificates to be used globally by all Chilkat classes.

Chilkat PureBasic Downloads

PureBasic
IncludeFile "CkTrustedRoots.pb"
IncludeFile "CkZip.pb"
IncludeFile "CkZipEntry.pb"
IncludeFile "CkCert.pb"

Procedure ChilkatExample()

    success.i = 0

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

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

    ;  Indicate that we will NOT trust any pre-installed certificates on the system.
    CkTrustedRoots::setCkTrustSystemCaRoots(trustedRoots, 0)

    ; Thawte is a certificate authority that provides a .zip download of their
    ; root CA certificates:  https://www.thawte.com/roots/index.html
    ; The direct download link is: https://www.verisign.com/support/thawte-roots.zip
    ; Note: The above URLs are valid at the time of writing this example (29-May-2015).

    ; Assuming the .zip has already been downloaded, open it and load each .pem file into
    ; our trusted roots object.
    zip.i = CkZip::ckCreate()
    If zip.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    ; Open a .zip containing PEM files, among other things..
    success = CkZip::ckOpenZip(zip,"qa_data/certs/thawte-roots.zip")
    If success = 0
        Debug CkZip::ckLastErrorText(zip)
        CkTrustedRoots::ckDispose(trustedRoots)
        CkZip::ckDispose(zip)
        ProcedureReturn
    EndIf

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

    pemStr.s
    cert.i = CkCert::ckCreate()
    If cert.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    pattern.s = "*.pem"
    bHasMoreEntries.i = CkZip::ckEntryMatching(zip,pattern,entry)
    While bHasMoreEntries = 1

        Debug "Entry: " + CkZipEntry::ckFileName(entry)

        ; Get the PEM of the CA cert:
        pemStr = CkZipEntry::ckUnzipToString(entry,0,"utf-8")

        ; Load it into a certificate object:
        success = CkCert::ckLoadPem(cert,pemStr)
        If success <> 1
            Debug CkCert::ckLastErrorText(cert)
        EndIf

        ; Add it to the trusted roots.
        CkTrustedRoots::ckAddCert(trustedRoots,cert)

        bHasMoreEntries = CkZipEntry::ckGetNextMatch(entry,pattern)
    Wend

    ;  Activate the trusted roots globally for all Chilkat objects.
    ;  This call really shouldn't fail, so we're not checking the return value.
    success = CkTrustedRoots::ckActivate(trustedRoots)


    CkTrustedRoots::ckDispose(trustedRoots)
    CkZip::ckDispose(zip)
    CkZipEntry::ckDispose(entry)
    CkCert::ckDispose(cert)


    ProcedureReturn
EndProcedure