Sample code for 30+ languages & platforms
B4X Requires Chilkat v11.0.0+

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 B4X Downloads

B4X
Dim success As Boolean = False

Dim certStore As ChilkatCertStore
certStore.Initialize

Dim readOnly As Boolean = True
success = certStore.OpenCurrentUserStore(readOnly)
If Not(success) Then
    Log(certStore.LastErrorText)
    Return
End If


Dim pfxPassword As String = "secret"

Dim allSuccess As Boolean = True
Dim numSuccess As Int = 0

Dim zip As ChilkatZip
zip.Initialize("zip")
zip.NewZip("qa_output/personalCerts.zip")

Dim certData As ChilkatBinData
certData.Initialize
Dim sbFilename As ChilkatStringBuilder
sbFilename.Initialize

'  Iterate over the certificates in the Current User store.
Dim cert As ChilkatCert
cert.Initialize("cert")
Dim numCerts As Int = certStore.NumCertificates
Dim i As Int = 0
Do While i < numCerts
    certStore.GetCert(i, cert)
    Log("DN = " & cert.SubjectDN)

    sbFilename.SetString("cert")
    sbFilename.AppendInt(i + 1)

    Dim bHasPrivateKey As Boolean = cert.HasPrivateKey
    If (bHasPrivateKey = True) And (cert.PrivateKeyExportable = True) Then
        '  Export to a .pfx
        success = cert.ExportToPfxBd(pfxPassword, True, certData)
        If success = True Then
            sbFilename.Append(".pfx")
            zip.AddBd(sbFilename.GetAsString, certData)
        End If

    Else
        '  Export to a .cer
        success = cert.ExportCertDerBd(certData)
        If success = True Then
            sbFilename.Append(".cer")
            zip.AddBd(sbFilename.GetAsString, certData)
        End If

    End If

    If success <> True Then
        allSuccess = False
    Else
        numSuccess = numSuccess + 1
    End If

    i = i + 1
Loop

If numSuccess > 0 Then
    success = zip.WriteZipAndClose
    If success <> True Then
        Log(zip.LastErrorText)
        allSuccess = False
    End If

End If


Log("All success = " & allSuccess)