Hi all,
The other day I posted a Javascript sample which shows how to use CertEnroll COM component to create a certificate request and install the response from the CA (Certificate Authority): How to create a certificate request with CertEnroll (JavaScript).
The installation part of that sample assumed that we got a Base64 text with the response from the CA. But what if we i.e. send the request to a server, the server gets a .p7b or .cer binary file with the response from the CA, and we want to install the response on the client who requested the cert on the first place?
The following ASP sample shows how to install on the client the .p7b/.cer binary file that the server got with the response from the CA:
<% ' Convert binary to Base64 ' Function BinaryToBase64(binary) ' Create temporary node with Base64 data type Set oXmlDom = CreateObject("microsoft.xmldom") Set oElement = oXmlDom.createElement("tmp") oElement.dataType = "bin.base64" ' Set bytes, get encoded String oElement.nodeTypedValue = binary BinaryToBase64 = oElement.text End Function ' Read file into buffer ' Function ReadBinaryFile(FileName) Const adTypeBinary = 1 'Create Stream object Dim BinaryStream Set BinaryStream = CreateObject("ADODB.Stream") 'Specify stream type - we want To get binary data. BinaryStream.Type = adTypeBinary 'Open the stream BinaryStream.Open 'Load the file data from disk To stream object BinaryStream.LoadFromFile FileName 'Open the stream And get binary data from the object ReadBinaryFile = BinaryStream.Read End Function ' Read binary file as Base64 ' FileName = "C:\temp\certnew.p7b" 'FileName = "C:\temp\certnew.cer" sPKCS7 = BinaryToBase64(ReadBinaryFile(FileName)) ' Be careful with line feeds in Base64 string ' strings = split(sPKCS7, chr(10)) sPKCS7 = """" for i = 0 to ubound(strings) - 1 sPKCS7 = sPKCS7 + strings(i) + """ + """ next sPKCS7 = sPKCS7 + strings(i) + """" %> <html> <head> <title>Certificate Request test</title> </head> <body> <object id="objCertEnrollClassFactory" classid="clsid:884e2049-217d-11da-b2a4-000e7bbb2b09"></object> <script language="javascript"> function InstallCert() { document.write("<br>Installing certificate..."); try { // Variables var objEnroll = objCertEnrollClassFactory.CreateObject("X509Enrollment.CX509Enrollment") objEnroll.Initialize(1); // ContextUser objEnroll.InstallResponse(4, <%=sPKCS7%>, 1, ""); // AllowUntrustedRoot = 4, XCN_CRYPT_STRING_BASE64 = 1 } catch (ex) { document.write("<br>" + ex.description); return false; } document.write("<br>Done!"); return true; } InstallCert(); </script> </body> </html>
I hope this helps.
Regards,
Alex (Alejandro Campos Magencio)