我们有一个现有的证书颁发应用程序(C#、ASP.NET、JavaScript),它在 IE 中使用 XenRoll 向 Windows XP 用户颁发证书。我需要扩展它以支持 Windows Vista 和 Windows 7 用户,也使用 IE。
对于 Vista 和 7,Microsoft 用新的 CertEnroll 控件替换了 XenRoll ActiveX 控件。我在 Vista SP2 中可以正常工作,但在 7 中,我在安装步骤中收到此错误:
CertEnroll::CX509Enrollment::InstallResponse:已处理证书链,但以不受信任提供者信任的根证书终止。0x800b0109 (-2146762487)
以下是相关 HTML 和 JavaScript 的片段:
<object id="classFactoryObj" classid="clsid:884e2049-217d-11da-b2a4-000e7bbb2b09"></object>
<script type="text/javascript">
function InstallCert()
{
try
{
var classFactory = document.getElementById("classFactoryObj");
var objEnroll = classFactory.CreateObject("X509Enrollment.CX509Enrollment");
var signedCert = '-----BEGIN CERTIFICATE-----' +
'REMOVED FOR BREVITY' +
'-----END CERTIFICATE-----';
objEnroll.Initialize(1); // User context
objEnroll.InstallResponse(4, signedCert, 6, ""); // AllowUntrustedRoot = 4
alert('Certificate installed');
}
catch (ex)
{
alert('Unable to install certificate: ' + ex.description);
}
}
InstallCert();
</script>
现在,确实根证书不受信任,但我正在调用 InstallResponse,第一个参数设置为 4,即使根证书不受信任,它也应该允许安装。这就像在 Vista 中宣传的那样有效,但在 Windows 7 中似乎没有。
我测试过,如果根证书是可信的,它确实有效。我相信有人会这么说,所以我会先发制人 - 让客户信任根证书对我们来说并不是一个真正的选择(我们希望将客户端身份验证证书分发给客户,作为对他们进行身份验证的一部分在我们的网络上)。
我在这里做错了吗?有没有其他人在 Windows 7 中得到这个工作?