Sample code for 30+ languages & platforms
Unicode 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 Unicode C++ Downloads

Unicode C++
#include <CkCertStoreW.h>
#include <CkZipW.h>
#include <CkBinDataW.h>
#include <CkStringBuilderW.h>
#include <CkCertW.h>

void ChilkatSample(void)
    {
    bool success = false;

    CkCertStoreW certStore;

    bool readOnly = true;
    success = certStore.OpenCurrentUserStore(readOnly);
    if (!success) {
        wprintf(L"%s\n",certStore.lastErrorText());
        return;
    }

    const wchar_t *pfxPassword = L"secret";

    bool allSuccess = true;
    int numSuccess = 0;

    CkZipW zip;
    zip.NewZip(L"qa_output/personalCerts.zip");

    CkBinDataW certData;
    CkStringBuilderW sbFilename;

    // Iterate over the certificates in the Current User store.
    CkCertW cert;
    int numCerts = certStore.get_NumCertificates();
    int i = 0;
    while (i < numCerts) {
        certStore.GetCert(i,cert);
        wprintf(L"DN = %s\n",cert.subjectDN());

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

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

        }
        else {
            // Export to a .cer
            success = cert.ExportCertDerBd(certData);
            if (success == true) {
                sbFilename.Append(L".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) {
            wprintf(L"%s\n",zip.lastErrorText());
            allSuccess = false;
        }

    }

    wprintf(L"All success = %d\n",allSuccess);
    }