Sample code for 30+ languages & platforms
Ruby

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

Ruby
require 'chilkat'

success = false

certStore = Chilkat::CkCertStore.new()

readOnly = true
success = certStore.OpenCurrentUserStore(readOnly)
if (!success)
    print certStore.lastErrorText() + "\n";
    exit
end

pfxPassword = "secret"

allSuccess = true
numSuccess = 0

zip = Chilkat::CkZip.new()
zip.NewZip("qa_output/personalCerts.zip")

certData = Chilkat::CkBinData.new()
sbFilename = Chilkat::CkStringBuilder.new()

# Iterate over the certificates in the Current User store.
cert = Chilkat::CkCert.new()
numCerts = certStore.get_NumCertificates()
i = 0
while i < numCerts
    certStore.GetCert(i,cert)
    print "DN = " + cert.subjectDN() + "\n";

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

    bHasPrivateKey = cert.HasPrivateKey()
    if ((bHasPrivateKey == true) and (cert.get_PrivateKeyExportable() == true))
        # Export to a .pfx
        success = cert.ExportToPfxBd(pfxPassword,true,certData)
        if (success == true)
            sbFilename.Append(".pfx")
            zip.AddBd(sbFilename.getAsString(),certData)
        end

    else
        # Export to a .cer
        success = cert.ExportCertDerBd(certData)
        if (success == true)
            sbFilename.Append(".cer")
            zip.AddBd(sbFilename.getAsString(),certData)
        end

    end

    if (success != true)
        allSuccess = false
    else
        numSuccess = numSuccess + 1
    end

    i = i + 1
end

if (numSuccess > 0)
    success = zip.WriteZipAndClose()
    if (success != true)
        print zip.lastErrorText() + "\n";
        allSuccess = false
    end

end

print "All success = " + allSuccess.to_s() + "\n";