微软的xenroll中有一个接口acceptpkcs7提供了证书的安装功能。具体的参数如下:
HRESULT acceptPKCS7(BSTR PKCS7) 其中参数pkcs7就是经过base64编码的证书。
如果要在web页中安装证书,过程如下:
1、初始化xenroll.dll
在html代码中加入
<OBJECT id=XEnroll classid=clsid:127698e4-e730-4e5c-a2b1-21490a70c8a1 codebase="xenroll.dll"> </OBJECT> |
2、读证书
证书可以从LDAP或数据库中读取,这不是我们的主题,所以在这里略过。有关细节可以参看本站的LDAP等主题。
3、调用acceptPKCS7接口
代码示例如下:
on error resume next sPKCS7 = 你取到证书内容 err.clear XEnroll.AcceptPkcs7(sPKCS7) if err.Number <> 0 then if err.number = -2146885628 then MsgBox "系统中已经存在该证书,或证书不是在这台机器申请的" else MsgBox "证书下载时出错,错误号="&err.description end if else MsgBox "证书已成功装入" end if |
说明:只有在本机生成的证书请求才可以这样安装证书。
微软的xenroll中的另外一个接口acceptpkcs7提供了根证书的安装功能。具体的参数如下:
[ c++]HRESULT InstallPKCS7(BSTR PKCS7) [ vb ]Sub InstallPKCS7( ByVal PKCS7 As String ) |
其中参数pkcs7就是经过base64编码的根证书,如果要在web页中安装证书,过程和安装用户证书一样。
1、在asp如何自动下载并安装根证书
注://开头的为注解
<% Dim fso, ts dim line,newcert newcert=" sPKCS7=" & chr(34)&chr(34) & vbcrlf Const ForReading = 1 Set fso = CreateObject("Scripting.FileSystemObject") // 这样要求根证书与这个网页必须放在同一个目录下。 Set ts = fso.OpenTextFile(Request.ServerVariables ("APPL_PHYSICAL_PATH")&"RootCert.cer", ForReading, False) do while Not ts.AtEndOfStream line = ts.ReadLine newcert=newcert & " sPKCS7=sPKCS7 & " & chr(34) & line & chr(34) & " & vbcrlf " & vbcrlf loop %> <html> <object id="XEnroll" classid="clsid:127698e4-e730-4e5c-a2b1-21490a70c8a1" codebase="xenroll.dll"></object> <script Language="VBScript"> ON ERROR resume next <% response.write(newcert) %> XEnroll.InstallPKCS7 sPKCS7 If err.number = 438 then msgbox "install root certificate fail ." Elseif err.number <> 0 then msgbox "install root certificate fail ." Else msgbox "install root certificate success ." End if window.close() </script> </html> |
其中do while...loop的目的就是想生成一段vbscript代码,生成的结果如下:
sPKCS7="" sPKCS7=sPKCS7 & "-----BEGIN CERTIFICATE-----" & vbcrlf sPKCS7=sPKCS7 & "MIICMjCCAZugAwIBAgIBATANBgkqhkiG9w0BAQUFADAUMRIwEAYDVQQKEwlIWWRy" & vbcrlf sPKCS7=sPKCS7 & "b2luZm8wHhcNMDQwNDExMDczMzI0WhcNMzQwNDA0MDczMzI0WjAUMRIwEAYDVQQK" & vbcrlf ...... ...... sPKCS7=sPKCS7 & "BQADgYEAjYHzQkIp1dE5zyPcrybDvpoT/MmMcZ3q7GANncp9Kq8b0Bj0It8kPPyN" & vbcrlf sPKCS7=sPKCS7 & "JPit6rmgErPqPdj789Sr1H7/XjY+tuBJLV1idDPlqV44b3rBk/8GjYmTmLuDOYBI" & vbcrlf sPKCS7=sPKCS7 & "XKqIEuO50QNJIdinCsCRyZ8h9O/VDTyMH4VUQsJ3YdZk2w3PrwU=" & vbcrlf sPKCS7=sPKCS7 & "-----END CERTIFICATE-----" & vbcrlf |
2、在php如何自动下载并安装根证书
首先也要取到证书,假如放在变量$cert中。
这样只需要将asp中生成sPKCS字符串部分替换成下面这段代码就可以了,生成的新内容在$newcert中。
$newcert = "sPKCS7=\"\"\r\n"; $line=strtok($cert,"\r\n"); while($line) { $newcert=$newcert." sPKCS7=sPKCS7 & \"".$line."\" & vbcrlf\r\n"; $line=strtok("\r\n"); } echo $newcert; ?> |
1、InstallPKCS7可以安装证书链
2、在ICEnroll3中第一次出现
http://netadmin.77169.com/HTML/20050421010639.html