在web上如何自动安装用户证书及根证书

微软的xenroll中有一个接口acceptpkcs7提供了证书的安装功能,本文将为您讲述如何通过该接口实现在web上自动安装用户证书及根证书,并提供部分实例代码。  



一、证书的安装  



微软的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如何自动下载并安装根证书  



注://开头的为注解  





<html>

<object id="XEnroll" classid="clsid:127698e4-e730-4e5c-a2b1-21490a70c8a1" codebase="xenroll.dll"></object>

<script Language="VBScript">

ON ERROR resume next



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;

?>  





三、installPKCS7与acceptPKCS7的不同  



1、InstallPKCS7可以安装证书链  



2、在ICEnroll3中第一次出现