Unicode C++
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
#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);
}