![]() |
Chilkat HOME Android™ AutoIt C C# C++ Chilkat2-Python CkPython Classic ASP DataFlex Delphi DLL Go Java Node.js Objective-C PHP Extension Perl PowerBuilder PowerShell PureBasic Ruby SQL Server Swift Tcl Unicode C Unicode C++ VB.NET VBScript Visual Basic 6.0 Visual FoxPro Xojo Plugin
(Visual FoxPro) Set .pfx/.p12 Safe Bag AttributesDemonstrates how to set safebag attributes in a .pfx/.p12. This example creates a .pfx from a .pem containing a private key and certificates, but also sets PFX safebag attributes before writing the .pfx. Note: This example requires Chilkat v11.0.0 or greater.
LOCAL lnSuccess LOCAL loPfx LOCAL loSbPem LOCAL lcPassword LOCAL lnForPrivateKey LOCAL lnKeyIdx LOCAL lnCertIdx LOCAL loPfx2 LOCAL loJson lnSuccess = 0 * We have a PEM containing one private key, and two certificates: * The private key is an ECDSA private key. * The private key is associated with the 1st certificate. * The 2nd certificate is the issuer of the 1st certificate. * -----BEGIN PRIVATE KEY----- * ME0CAQAwEwYHKoZIzj0CAQYIKoZIzj0DAQcEMzAxAgEBBCDgAn4Dal+0iEhIsYBk * 6SdSR344vyj0suhOIxsjmM19s6AKBggqhkjOPQMBBw== * -----END PRIVATE KEY----- * -----BEGIN CERTIFICATE----- * MIIBXzCCAQSgAwIBAgIUGp2obfF61BG7QTsqpyT+VvxxJC0wCgYIKoZIzj0EAwIw * DTELMAkGA1UEAwwCQ0EwHhcNMjAwMzI5MTU1MTEwWhcNMzAwMzI3MTU1MTEwWjAN * MQswCQYDVQQDDAJFRTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABEil+DhBUss8 * kMCjEWvZHA+jdy1mQ76a2HFd+5p+AcFGQxNeG8/HXZax7FFzcrczWrli25R8P8j1 * cqhwPY4HtwujQjBAMB0GA1UdDgQWBBTenwm6x4A4W5BzZ2OckKA2IFtPSTAfBgNV * HSMEGDAWgBTx1U/gWiRhAASl6FV04DxP3XmcazAKBggqhkjOPQQDAgNJADBGAiEA * rkqbz5t1M/CjqXSKE5ebBLQ3npF+q7GRC8C2ovDi/xoCIQDGve7OP/ppIDcCNonr * +WSRf5M/6Wvw1lnEsAXf3nLTeQ== * -----END CERTIFICATE----- * -----BEGIN CERTIFICATE----- * MIIBcDCCARWgAwIBAgIUAnQiKKy/PdLnH0A6vYKBq21w1JAwCgYIKoZIzj0EAwIw * DTELMAkGA1UEAwwCQ0EwHhcNMjAwMzI5MTU1MTEwWhcNMzAwMzI3MTU1MTEwWjAN * MQswCQYDVQQDDAJDQTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABPB6yVvqt8cL * EneRtnjoi87H0ATi+JP1w2qkz4GLOaPtFxAnV0LdQCuN91SGbAlKrSkhFyWWimjh * Rqe9+b/1WCijUzBRMB0GA1UdDgQWBBTx1U/gWiRhAASl6FV04DxP3XmcazAfBgNV * HSMEGDAWgBTx1U/gWiRhAASl6FV04DxP3XmcazAPBgNVHRMBAf8EBTADAQH/MAoG * CCqGSM49BAMCA0kAMEYCIQCcIfssfrOruVYvqhxbLGeyc5ppEX53zUU35wIE2t7C * fAIhAKhOTEvN+pdEn+cNwW3AEi7D08ZUQx3P80i4EnFPs0OQ * -----END CERTIFICATE----- loPfx = CreateObject('Chilkat.Pfx') loSbPem = CreateObject('Chilkat.StringBuilder') lnSuccess = loSbPem.LoadFile("qa_data/pfx/test_ecdsa.pem","utf-8") IF (lnSuccess = 0) THEN ? "Failed to load the PEM file." RELEASE loPfx RELEASE loSbPem CANCEL ENDIF * The PEM in this example is unencrypted. There is no password. lcPassword = "" lnSuccess = loPfx.LoadPem(loSbPem.GetAsString(),lcPassword) IF (lnSuccess = 0) THEN ? loPfx.LastErrorText RELEASE loPfx RELEASE loSbPem CANCEL ENDIF * Let's add some safebag attributes for the private key... lnForPrivateKey = 1 lnKeyIdx = 0 lnSuccess = loPfx.SetSafeBagAttr(lnForPrivateKey,lnKeyIdx,"localKeyId","16777216","decimal") IF (lnSuccess = 0) THEN ? loPfx.LastErrorText RELEASE loPfx RELEASE loSbPem CANCEL ENDIF lnSuccess = loPfx.SetSafeBagAttr(lnForPrivateKey,lnKeyIdx,"keyContainerName","{B99EB9E7-6AF7-42AF-A43A-D4B2225B7605}","ascii") IF (lnSuccess = 0) THEN ? loPfx.LastErrorText RELEASE loPfx RELEASE loSbPem CANCEL ENDIF lnSuccess = loPfx.SetSafeBagAttr(lnForPrivateKey,lnKeyIdx,"storageProvider","Microsoft Software Key Storage Provider","ascii") IF (lnSuccess = 0) THEN ? loPfx.LastErrorText RELEASE loPfx RELEASE loSbPem CANCEL ENDIF * Add the localKeyId safebag attribute to the 1st certificate. lnForPrivateKey = 0 lnCertIdx = 0 lnSuccess = loPfx.SetSafeBagAttr(lnForPrivateKey,lnCertIdx,"localKeyId","16777216","decimal") IF (lnSuccess = 0) THEN ? loPfx.LastErrorText RELEASE loPfx RELEASE loSbPem CANCEL ENDIF * Write the pfx. lnSuccess = loPfx.ToFile("secret","qa_output/ee.pfx") IF (lnSuccess = 0) THEN ? loPfx.LastErrorText RELEASE loPfx RELEASE loSbPem CANCEL ENDIF * Let's load the .pfx we just wrote to see if the safebag attributes exist. loPfx2 = CreateObject('Chilkat.Pfx') lnSuccess = loPfx2.LoadPfxFile("qa_output/ee.pfx","secret") IF (lnSuccess = 0) THEN ? loPfx2.LastErrorText RELEASE loPfx RELEASE loSbPem RELEASE loPfx2 CANCEL ENDIF * Information about the contents of the PFX was collected in the call to LoadPfxFile. loJson = CreateObject('Chilkat.JsonObject') loPfx2.GetLastJsonData(loJson) loJson.EmitCompact = 0 ? loJson.Emit() * Shows what's in the PFX just loaded: * { * "authenticatedSafe": { * "contentInfo": [ * { * "type": "Data", * "safeBag": [ * { * "type": "pkcs8ShroudedKeyBag", * "attrs": { * "keyContainerName": "{B99EB9E7-6AF7-42AF-A43A-D4B2225B7605}", * "msStorageProvider": "Microsoft Software Key Storage Provider", * "localKeyId": "16777216" * } * } * ] * }, * { * "type": "EncryptedData", * "safeBag": [ * { * "type": "certBag", * "attrs": { * "localKeyId": "16777216" * }, * "subject": "EE", * "serialNumber": "1a9da86df17ad411bb413b2aa724fe56fc71242d" * }, * { * "type": "certBag", * "subject": "CA", * "serialNumber": "02742228acbf3dd2e71f403abd8281ab6d70d490" * } * ] * } * ] * } * } RELEASE loPfx RELEASE loSbPem RELEASE loPfx2 RELEASE loJson |
© 2000-2025 Chilkat Software, Inc. All Rights Reserved.