Chilkat HOME .NET Core C# Android™ AutoIt C C# C++ Chilkat2-Python CkPython Classic ASP DataFlex Delphi ActiveX Delphi DLL Go Java Lianja Mono C# Node.js Objective-C PHP ActiveX PHP Extension Perl PowerBuilder PowerShell PureBasic Ruby SQL Server Swift 2 Swift 3,4,5... Tcl Unicode C Unicode C++ VB.NET VBScript Visual Basic 6.0 Visual FoxPro Xojo Plugin
(DataFlex) Export a Private Key from an MS Storage ProviderDemonstrates how to export a private key from a Microsoft Storage Provider. Note: This example requires Chilkat v9.5.0.83 or greater.
Use ChilkatAx-win32.pkg Procedure Test Handle hoCert Boolean iSuccess Variant vPrivKey Handle hoPrivKey String sStorageProvider String sKeyName Handle hoKeyCon Variant vPrivKey2 Handle hoPrivKey2 Boolean iSilentFlag String sTemp1 Boolean bTemp1 // This example requires Chilkat v9.5.0.83 or greater. // We'll export a certificate's private key from the MS storage provider. // It is assumed the certificate + private key is already installed on the Windows system. // The export does not remove the key from the Windows storage provider. // First, let's get a certificate in one of the many ways we can do it. // (I ran certmgr.msc, opened a certificate, and noted it's thumbprint.) Get Create (RefClass(cComChilkatCert)) To hoCert If (Not(IsComObjectCreated(hoCert))) Begin Send CreateComObject of hoCert End Get ComLoadByThumbprint Of hoCert "ea5a129c1919a52d238ee28d9f3a8f345b768388" "hex" To iSuccess If (iSuccess = False) Begin Get ComLastErrorText Of hoCert To sTemp1 Showln sTemp1 Procedure_Return End Get ComSubjectDN Of hoCert To sTemp1 Showln "Found: " sTemp1 // First export the private key the easy way. Get ComExportPrivateKey Of hoCert To vPrivKey If (IsComObject(vPrivKey)) Begin Get Create (RefClass(cComChilkatPrivateKey)) To hoPrivKey Set pvComObject Of hoPrivKey To vPrivKey End Get ComLastMethodSuccess Of hoCert To bTemp1 If (bTemp1 = False) Begin Get ComLastErrorText Of hoCert To sTemp1 Showln sTemp1 Procedure_Return End // OK.. we have the private key. Do whatever we want with it.. Send Destroy of hoPrivKey // ------------------------------------------------------------- // Now let's export in a more roundabout way by getting information about the // storage provider and key name and then we'll export completely independent // of the certificate. // // Remember: The private key is not contained within the certificate. An X.509 certificate // embeds the public key, but the counterpart private key is stored elsewhere, such // as in a .pfx/.p12, or as in this case, in the Windows "protected store", or perhaps on // a smartcard or hardware token. (But a private key stored on a smartcard or token cannot // be exported. It must remain on the hardware.) // Get ComCspName Of hoCert To sStorageProvider Get ComKeyContainerName Of hoCert To sKeyName Showln "Information about the certificate's private key:" Showln "Storage Provider: " sStorageProvider Showln "Key Name: " sKeyName // Export using just the name of the storage provider and key. Get Create (RefClass(cComChilkatKeyContainer)) To hoKeyCon If (Not(IsComObjectCreated(hoKeyCon))) Begin Send CreateComObject of hoKeyCon End Get Create (RefClass(cComChilkatPrivateKey)) To hoPrivKey2 If (Not(IsComObjectCreated(hoPrivKey2))) Begin Send CreateComObject of hoPrivKey2 End Move False To iSilentFlag Get pvComObject of hoPrivKey2 to vPrivKey2 Get ComExportKey Of hoKeyCon sKeyName sStorageProvider iSilentFlag vPrivKey2 To iSuccess If (iSuccess = False) Begin Get ComLastErrorText Of hoKeyCon To sTemp1 Showln sTemp1 Procedure_Return End // OK.. we have the private key in privKey2. Do whatever we want with it.. // Perhaps we save as encrypted PKCS8 PEM. Get ComSavePkcs8EncryptedPemFile Of hoPrivKey2 "myPassword" "qa_output/privKey2.pem" To iSuccess If (iSuccess = False) Begin Get ComLastErrorText Of hoPrivKey2 To sTemp1 Showln sTemp1 Procedure_Return End Showln "Success." End_Procedure |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.