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
(PowerBuilder) Generate a CSR with keyUsage, extKeyUsage, and other ExtensionsSee more CSR ExamplesDemonstrates how to generate a CSR containing a 1.2.840.113549.1.9.14 extensionRequest with the following extensions:
integer li_rc oleobject loo_Ecc oleobject loo_Prng oleobject loo_PrivKey oleobject loo_Csr string s oleobject loo_BdTemp string ls_S_base64_utf16be oleobject loo_Xml oleobject loo_PubKey oleobject loo_BdPubKeyDer string ls_Ski string ls_CsrPem // This requires the Chilkat API to have been previously unlocked. // See Global Unlock Sample for sample code. // This example will generate a secp256r1 ECDSA key for the CSR. loo_Ecc = create oleobject // Use "Chilkat_9_5_0.Ecc" for versions of Chilkat < 10.0.0 li_rc = loo_Ecc.ConnectToNewObject("Chilkat.Ecc") if li_rc < 0 then destroy loo_Ecc MessageBox("Error","Connecting to COM object failed") return end if loo_Prng = create oleobject // Use "Chilkat_9_5_0.Prng" for versions of Chilkat < 10.0.0 li_rc = loo_Prng.ConnectToNewObject("Chilkat.Prng") loo_PrivKey = loo_Ecc.GenEccKey("secp256r1",loo_Prng) if loo_Ecc.LastMethodSuccess = 0 then Write-Debug "Failed to generate a new ECDSA private key." destroy loo_Ecc destroy loo_Prng return end if loo_Csr = create oleobject // Use "Chilkat_9_5_0.Csr" for versions of Chilkat < 10.0.0 li_rc = loo_Csr.ConnectToNewObject("Chilkat.Csr") // Add common CSR fields: loo_Csr.CommonName = "mysubdomain.mydomain.com" loo_Csr.Country = "GB" loo_Csr.State = "Yorks" loo_Csr.Locality = "York" loo_Csr.Company = "Internet Widgits Pty Ltd" loo_Csr.EmailAddress = "support@mydomain.com" // Add the following 1.2.840.113549.1.9.14 extensionRequest // Note: The easiest way to know the content and format of the XML to be added is to examine // a pre-existing CSR with the same desired extensionRequest. You can use Chilkat to // get the extensionRequest from an existing CSR. // // Here is a sample extension request: // <?xml version="1.0" encoding="utf-8"?> // <set> // <sequence> // <sequence> // <oid>1.3.6.1.4.1.311.20.2</oid> // <asnOctets> // <universal tag="30" constructed="0">AEUAbgBkAEUAbgB0AGkAdAB5AEMAbABpAGUAbgB0AEEAdQB0AGgAQwBlAHIAdABpAGYAaQBjAGEAdABl // AF8AQwBTAFIAUABhAHMAcwB0AGgAcgBvAHUAZwBoAC8AVgAx</universal> // </asnOctets> // </sequence> // <sequence> // <oid>2.5.29.15</oid> // <bool>1</bool> // <asnOctets> // <bits n="3">A0</bits> // </asnOctets> // </sequence> // <sequence> // <oid>2.5.29.37</oid> // <asnOctets> // <sequence> // <oid>1.3.6.1.5.5.7.3.3</oid> // </sequence> // </asnOctets> // </sequence> // <sequence> // <oid>2.5.29.14</oid> // <asnOctets> // <octets>MCzBMQAViXBz8IDt8LsgmJxJ4Xg=</octets> // </asnOctets> // </sequence> // </sequence> // </set> // Use this online tool to generate code from sample XML: // Generate Code to Create XML // A few notes: // The string "AEUAbgBkAEUAbgB0AGkAdAB5AEMAbABpAGUAbgB0AEEAdQB0AGgAQwBlAHIAdABpAGYAaQBjAGEAdABlAF8AQwBTAFIAUABhAHMAcwB0AGgAcgBvAHUAZwBoAC8AVgAx" // is the base64 encoding of the utf-16be byte representation of the string "EndEntityClientAuthCertificate_CSRPassthrough/V1" s = "EndEntityClientAuthCertificate_CSRPassthrough/V1" loo_BdTemp = create oleobject // Use "Chilkat_9_5_0.BinData" for versions of Chilkat < 10.0.0 li_rc = loo_BdTemp.ConnectToNewObject("Chilkat.BinData") loo_BdTemp.AppendString(s,"utf-16be") ls_S_base64_utf16be = loo_BdTemp.GetEncoded("base64") // The string should be "AEUA....." Write-Debug ls_S_base64_utf16be // Here's the code to generate the above extension request. loo_Xml = create oleobject // Use "Chilkat_9_5_0.Xml" for versions of Chilkat < 10.0.0 li_rc = loo_Xml.ConnectToNewObject("Chilkat.Xml") loo_Xml.Tag = "set" loo_Xml.UpdateChildContent("sequence|sequence|oid","1.3.6.1.4.1.311.20.2") loo_Xml.UpdateAttrAt("sequence|sequence|asnOctets|universal",1,"tag","30") loo_Xml.UpdateAttrAt("sequence|sequence|asnOctets|universal",1,"constructed","0") loo_Xml.UpdateChildContent("sequence|sequence|asnOctets|universal",ls_S_base64_utf16be) loo_Xml.UpdateChildContent("sequence|sequence[1]|oid","2.5.29.15") loo_Xml.UpdateChildContent("sequence|sequence[1]|bool","1") loo_Xml.UpdateAttrAt("sequence|sequence[1]|asnOctets|bits",1,"n","3") // A0 is hex for decimal 160. loo_Xml.UpdateChildContent("sequence|sequence[1]|asnOctets|bits","A0") loo_Xml.UpdateChildContent("sequence|sequence[2]|oid","2.5.29.37") loo_Xml.UpdateChildContent("sequence|sequence[2]|asnOctets|sequence|oid","1.3.6.1.5.5.7.3.3") // This is the subjectKeyIdentifier extension. // The string "MCzBMQAViXBz8IDt8LsgmJxJ4Xg=" is base64 that decodes to 20 bytes, which is a SHA1 hash. // This is simply a hash of the DER of the public key. loo_PubKey = loo_PrivKey.GetPublicKey() loo_BdPubKeyDer = create oleobject // Use "Chilkat_9_5_0.BinData" for versions of Chilkat < 10.0.0 li_rc = loo_BdPubKeyDer.ConnectToNewObject("Chilkat.BinData") loo_BdPubKeyDer.AppendEncoded(loo_PubKey.GetEncoded(1,"base64"),"base64") ls_Ski = loo_BdPubKeyDer.GetHash("sha1","base64") destroy loo_PubKey loo_Xml.UpdateChildContent("sequence|sequence[3]|oid","2.5.29.14") loo_Xml.UpdateChildContent("sequence|sequence[3]|asnOctets|octets",ls_Ski) // Add the extension request to the CSR loo_Csr.SetExtensionRequest(loo_Xml) // Generate the CSR with the extension request ls_CsrPem = loo_Csr.GenCsrPem(loo_PrivKey) if loo_Csr.LastMethodSuccess = 0 then Write-Debug loo_Csr.LastErrorText destroy loo_PrivKey destroy loo_Ecc destroy loo_Prng destroy loo_Csr destroy loo_BdTemp destroy loo_Xml destroy loo_BdPubKeyDer return end if Write-Debug ls_CsrPem destroy loo_PrivKey destroy loo_Ecc destroy loo_Prng destroy loo_Csr destroy loo_BdTemp destroy loo_Xml destroy loo_BdPubKeyDer |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.