Chilkat HOME Android™ Classic ASP C C++ C# Mono C# .NET Core C# C# UWP/WinRT DataFlex Delphi ActiveX Delphi DLL Visual FoxPro Java Lianja MFC Objective-C Perl PHP ActiveX PHP Extension PowerBuilder PowerShell PureBasic CkPython Chilkat2-Python Ruby SQL Server Swift 2 Swift 3,4,5... Tcl Unicode C Unicode C++ Visual Basic 6.0 VB.NET VB.NET UWP/WinRT VBScript Xojo Plugin Node.js Excel Go
(VB.NET UWP/WinRT) Duplicate openssl req -newkey rsa:2048 -nodes -keyout mydomain.pem -out mydomain.csrDemonstrates how to duplicate this OpenSSL command: openssl req -newkey rsa:2048 -nodes -keyout mydomain.pem -out mydomain.csr This command creates 2 files:
The second file is needed to pair with the certificate that will later be received from the CA.
' This example requires the Chilkat API to have been previously unlocked. ' See Global Unlock Sample for sample code. Dim rsa As New Chilkat.Rsa ' Generate a 2048-bit key. Chilkat RSA supports ' key sizes ranging from 512 bits to 8192 bits. Dim success As Boolean = rsa.GenerateKey(2048) If (success <> True) Then Debug.WriteLine(rsa.LastErrorText) Exit Sub End If Dim privKey As Chilkat.PrivateKey = rsa.ExportPrivateKeyObj() ' Save the private key to unencrypted PKCS8 PEM success = privKey.SavePkcs8PemFile("mydomain.pem") ' (alternatively) Save the private key to encrypted PKCS8 PEM success = privKey.SavePkcs8EncryptedPemFile("myPassword","mydomain_enc.pem") ' We'll need the private key's modulus for the CSR. ' The modulus is not something that needs to be protected. Most people don't realize ' that a public key is actually just a subset of the private key. The public parts of ' an RSA private key are the modulus and exponent. The exponent is always 65537. Dim privKeyXml As New Chilkat.Xml success = privKeyXml.LoadXml(privKey.GetXml()) ' Get the modulus in base64 format: Dim keyModulus As String = privKeyXml.GetChildContent("Modulus") ' -------------------------------------------------------------------------------- ' Now build the CSR using Chilkat's ASN.1 API. ' The keyModulus will be embedded within the ASN.1. ' A new ASN.1 object is automatically a SEQUENCE. ' Given that the CSR's root item is a SEQUENCE, we can use ' this as the root of our CSR. Dim asnRoot As New Chilkat.Asn ' Beneath the root, we have a SEQUENCE (the certificate request info), ' another SEQUENCE (the algorithm identifier), and a BITSTRING (the signature data) success = asnRoot.AppendSequence() success = asnRoot.AppendSequence() ' ---------------------------------- ' Build the Certificate Request Info ' ---------------------------------- Dim asnCertReqInfo As Chilkat.Asn = asnRoot.GetSubItem(0) success = asnCertReqInfo.AppendInt(0) ' Build the Subject part of the Certificate Request Info Dim asnCertSubject As Chilkat.Asn = asnCertReqInfo.AppendSequenceR() ' Add each subject part.. Dim asnTemp As Chilkat.Asn = asnCertSubject.AppendSetR() success = asnTemp.AppendSequence2() ' AppendSequence2 updates the internal reference to the newly appended SEQUENCE. ' The OID and printable string are added to the SEQUENCE. success = asnTemp.AppendOid("2.5.4.6") success = asnTemp.AppendString("printable","US") asnTemp = asnCertSubject.AppendSetR() success = asnTemp.AppendSequence2() success = asnTemp.AppendOid("2.5.4.8") success = asnTemp.AppendString("utf8","Utah") asnTemp = asnCertSubject.AppendSetR() success = asnTemp.AppendSequence2() success = asnTemp.AppendOid("2.5.4.7") success = asnTemp.AppendString("utf8","Lindon") asnTemp = asnCertSubject.AppendSetR() success = asnTemp.AppendSequence2() success = asnTemp.AppendOid("2.5.4.10") success = asnTemp.AppendString("utf8","DigiCert Inc.") asnTemp = asnCertSubject.AppendSetR() success = asnTemp.AppendSequence2() success = asnTemp.AppendOid("2.5.4.11") success = asnTemp.AppendString("utf8","DigiCert") asnTemp = asnCertSubject.AppendSetR() success = asnTemp.AppendSequence2() success = asnTemp.AppendOid("2.5.4.3") success = asnTemp.AppendString("utf8","example.digicert.com") ' Build the Public Key Info part of the Certificate Request Info Dim asnPubKeyInfo As Chilkat.Asn = asnCertReqInfo.AppendSequenceR() Dim asnPubKeyAlgId As Chilkat.Asn = asnPubKeyInfo.AppendSequenceR() success = asnPubKeyAlgId.AppendOid("1.2.840.113549.1.1.1") success = asnPubKeyAlgId.AppendNull() ' The public key itself is a BIT STRING, but the bit string is composed of ASN.1 ' for the RSA public key. We'll first build the RSA ASN.1 for the public key ' (containing the 2048 bit modulus and exponent), and encoded it to DER, and then add ' the DER bytes as a BIT STRING (as a sub-item of asnPubKeyInfo) ' This is already a SEQUENCE.. Dim asnRsaKey As New Chilkat.Asn ' The RSA modulus is a big integer. success = asnRsaKey.AppendBigInt(keyModulus,"base64") success = asnRsaKey.AppendInt(65537) Dim rsaKeyDerBase64 As String = asnRsaKey.GetEncodedDer("base64") ' Now add the RSA key DER as a BIT STRING. success = asnPubKeyInfo.AppendBits(rsaKeyDerBase64,"base64") ' The last part of the certificate request info is an empty context-specific constructed item ' with a tag equal to 0. success = asnCertReqInfo.AppendContextConstructed(0) ' Get the DER of the asnCertReqInfo. ' This will be signed using the RSA private key. Dim bdDer As New Chilkat.BinData success = asnCertReqInfo.WriteBd(bdDer) ' Add the signature to the ASN.1 Dim bdSig As New Chilkat.BinData success = rsa.SignBd(bdDer,"SHA1",bdSig) success = asnRoot.AppendBits(bdSig.GetEncoded("base64"),"base64") ' ---------------------------------- ' Finally, add the algorithm identifier, which is the 2nd sub-item under the root. ' ---------------------------------- Dim asnAlgId As Chilkat.Asn = asnRoot.GetSubItem(1) success = asnAlgId.AppendOid("1.2.840.113549.1.1.5") success = asnAlgId.AppendNull() ' Write the CSR to a DER encoded binary file: success = asnRoot.WriteBinaryDer("qa_output/mydomain.csr") If (success <> True) Then Debug.WriteLine(asnRoot.LastErrorText) Exit Sub End If ' It is also possible to get the CSR in base64 format: Dim csrBase64 As String = asnRoot.GetEncodedDer("base64") Debug.WriteLine("Base64 CSR:") Debug.WriteLine(csrBase64) |
© 2000-2022 Chilkat Software, Inc. All Rights Reserved.