(JavaScript) Backup Windows Current User / Personal Certificates to a .zip
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. Note: This example requires Chilkat v11.0.0 or greater.
var success = false;
var certStore = new CkCertStore();
var readOnly = true;
success = certStore.OpenCurrentUserStore(readOnly);
if (!success) {
console.log(certStore.LastErrorText);
return;
}
var pfxPassword = "secret";
var allSuccess = true;
var numSuccess = 0;
var zip = new CkZip();
zip.NewZip("qa_output/personalCerts.zip");
var certData = new CkBinData();
var sbFilename = new CkStringBuilder();
// Iterate over the certificates in the Current User store.
var cert = new CkCert();
var numCerts = certStore.NumCertificates;
var i = 0;
while (i < numCerts) {
certStore.GetCert(i,cert);
console.log("DN = " + cert.SubjectDN);
sbFilename.SetString("cert");
sbFilename.AppendInt(i+1);
var 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) {
console.log(zip.LastErrorText);
allSuccess = false;
}
}
console.log("All success = " + allSuccess);
|