PureBasic
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
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