Sample code for 30+ languages & platforms
Perl

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

Perl
use chilkat();

$success = 0;

$certStore = chilkat::CkCertStore->new();

$readOnly = 1;
$success = $certStore->OpenCurrentUserStore($readOnly);
if (!$success) {
    print $certStore->lastErrorText() . "\r\n";
    exit;
}

$pfxPassword = "secret";

$allSuccess = 1;
$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() . "\r\n";

    $sbFilename->SetString("cert");
    $sbFilename->AppendInt($i + 1);

    $bHasPrivateKey = $cert->HasPrivateKey();
    if (($bHasPrivateKey == 1) and ($cert->get_PrivateKeyExportable() == 1)) {
        # Export to a .pfx
        $success = $cert->ExportToPfxBd($pfxPassword,1,$certData);
        if ($success == 1) {
            $sbFilename->Append(".pfx");
            $zip->AddBd($sbFilename->getAsString(),$certData);
        }

    }
    else {
        # Export to a .cer
        $success = $cert->ExportCertDerBd($certData);
        if ($success == 1) {
            $sbFilename->Append(".cer");
            $zip->AddBd($sbFilename->getAsString(),$certData);
        }

    }

    if ($success != 1) {
        $allSuccess = 0;
    }
    else {
        $numSuccess = $numSuccess + 1;
    }

    $i = $i + 1;
}

if ($numSuccess > 0) {
    $success = $zip->WriteZipAndClose();
    if ($success != 1) {
        print $zip->lastErrorText() . "\r\n";
        $allSuccess = 0;
    }

}

print "All success = " . $allSuccess . "\r\n";