PureBasic
PureBasic
Backup Windows Current User / Personal Certificates to a .zip
See more Certificates Examples
Demonstrates how to backup the certificates in the Windows registry-based Current User certificate store (in the "Personal" Logical Store as seen in certmgr.msc), to a zip archive. Certificates having an exportable private key are exported to .pfx files. Certificates with no private key, or with a non-exportable private key, are exported to .cer files.Obviously, this example only runs on Windows computers.
Chilkat PureBasic Downloads
IncludeFile "CkCertStore.pb"
IncludeFile "CkZip.pb"
IncludeFile "CkBinData.pb"
IncludeFile "CkCert.pb"
IncludeFile "CkStringBuilder.pb"
Procedure ChilkatExample()
success.i = 0
certStore.i = CkCertStore::ckCreate()
If certStore.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
readOnly.i = 1
success = CkCertStore::ckOpenCurrentUserStore(certStore,readOnly)
If Not success
Debug CkCertStore::ckLastErrorText(certStore)
CkCertStore::ckDispose(certStore)
ProcedureReturn
EndIf
pfxPassword.s = "secret"
allSuccess.i = 1
numSuccess.i = 0
zip.i = CkZip::ckCreate()
If zip.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
CkZip::ckNewZip(zip,"qa_output/personalCerts.zip")
certData.i = CkBinData::ckCreate()
If certData.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
sbFilename.i = CkStringBuilder::ckCreate()
If sbFilename.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
; Iterate over the certificates in the Current User store.
cert.i = CkCert::ckCreate()
If cert.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
numCerts.i = CkCertStore::ckNumCertificates(certStore)
i.i = 0
While i < numCerts
CkCertStore::ckGetCert(certStore,i,cert)
Debug "DN = " + CkCert::ckSubjectDN(cert)
CkStringBuilder::ckSetString(sbFilename,"cert")
CkStringBuilder::ckAppendInt(sbFilename,i + 1)
bHasPrivateKey.i = CkCert::ckHasPrivateKey(cert)
If (bHasPrivateKey = 1) AND (CkCert::ckPrivateKeyExportable(cert) = 1)
; Export to a .pfx
success = CkCert::ckExportToPfxBd(cert,pfxPassword,1,certData)
If success = 1
CkStringBuilder::ckAppend(sbFilename,".pfx")
CkZip::ckAddBd(zip,CkStringBuilder::ckGetAsString(sbFilename),certData)
EndIf
Else
; Export to a .cer
success = CkCert::ckExportCertDerBd(cert,certData)
If success = 1
CkStringBuilder::ckAppend(sbFilename,".cer")
CkZip::ckAddBd(zip,CkStringBuilder::ckGetAsString(sbFilename),certData)
EndIf
EndIf
If success <> 1
allSuccess = 0
Else
numSuccess = numSuccess + 1
EndIf
i = i + 1
Wend
If numSuccess > 0
success = CkZip::ckWriteZipAndClose(zip)
If success <> 1
Debug CkZip::ckLastErrorText(zip)
allSuccess = 0
EndIf
EndIf
Debug "All success = " + Str(allSuccess)
CkCertStore::ckDispose(certStore)
CkZip::ckDispose(zip)
CkBinData::ckDispose(certData)
CkStringBuilder::ckDispose(sbFilename)
CkCert::ckDispose(cert)
ProcedureReturn
EndProcedure