Sample code for 30+ languages & platforms
.NET Core C#

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 .NET Core C# Downloads

.NET Core C#
bool success = false;

Chilkat.CertStore certStore = new Chilkat.CertStore();

bool readOnly = true;
success = certStore.OpenCurrentUserStore(readOnly);
if (!success) {
    Debug.WriteLine(certStore.LastErrorText);
    return;
}

string pfxPassword = "secret";

bool allSuccess = true;
int numSuccess = 0;

Chilkat.Zip zip = new Chilkat.Zip();
zip.NewZip("qa_output/personalCerts.zip");

Chilkat.BinData certData = new Chilkat.BinData();
Chilkat.StringBuilder sbFilename = new Chilkat.StringBuilder();

// Iterate over the certificates in the Current User store.
Chilkat.Cert cert = new Chilkat.Cert();
int numCerts = certStore.NumCertificates;
int i = 0;
while (i < numCerts) {
    certStore.GetCert(i,cert);
    Debug.WriteLine("DN = " + cert.SubjectDN);

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

    bool bHasPrivateKey = cert.HasPrivateKey();
    if ((bHasPrivateKey == true) && (cert.PrivateKeyExportable == true)) {
        // Export to a .pfx
        success = cert.ExportToPfxBd(pfxPassword,true,certData);
        if (success == true) {
            sbFilename.Append(".pfx");
            zip.AddBd(sbFilename.GetAsString(),certData);
        }

    }
    else {
        // Export to a .cer
        success = cert.ExportCertDerBd(certData);
        if (success == true) {
            sbFilename.Append(".cer");
            zip.AddBd(sbFilename.GetAsString(),certData);
        }

    }

    if (success != true) {
        allSuccess = false;
    }
    else {
        numSuccess = numSuccess + 1;
    }

    i = i + 1;
}

if (numSuccess > 0) {
    success = zip.WriteZipAndClose();
    if (success != true) {
        Debug.WriteLine(zip.LastErrorText);
        allSuccess = false;
    }

}

Debug.WriteLine("All success = " + Convert.ToString(allSuccess));