我们有一个现有的证书颁发应用程序(C#、ASP.NET、JavaScript),该应用程序使用IE中的XenRoll向Windows用户颁发证书。我需要扩展这一点,以支持Windows和Windows 7用户,也使用IE。
对于Vista和7,微软用新的XenRoll控件取代了ActiveX控件。我已经在Vista SP2中实现了这个功能,但是在7中,我在安装步骤中得到了这个错误:
CertEnroll::CX509 CertEnroll::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中使用过吗?
发布于 2010-09-03 14:31:06
解决方案是安装修复KB 2078942。
请注意,此修补程序并不声称修复了此问题,但它确实解决了此问题!更确切地说是结婚,否则我会更早地遇到它:-/
我相信这是一个来自Vista的回归错误,因为有一个用于Vista的热修复来解决我所遇到的确切问题。
谢谢你和上一票人昨天花时间帮我解决了这件事。
发布于 2010-09-02 16:25:06
不久前,我为演示编写了这个剧本 (与此页一起编写)。它支持<keygen/>,并在Internet上用XEnroll或CertEnroll调用替换它。这个项目已经有了一些进展,但是我刚刚在Windows7上用这支测试了IE8,它起了作用。CA证书根本不在客户端机器上。为了运行ActiveX,我不得不将安全设置降低到“低”(否则,它甚至不会提交请求,所以更不用说在响应中安装证书)。
如果这有帮助的话,我会这样做:
try {
enrollObj.InstallResponse(4, xmlHttpRequest.responseText,
0, "");
window.alert("A certificate has been installed.");
} catch (e1) {
try {
enrollObj.InstallResponse(0,
xmlHttpRequest.responseText, 0, "");
window.alert("A certificate has been installed.");
} catch (e2) {
window
.alert("You're probably using Vista without SP1 or above, in which case you need to add the certificate of this authority as a trusted root certificate.");
}
}我必须承认,我没有测试使用了这两种情况中的哪一种(因为这是相同的警告信息)。
https://stackoverflow.com/questions/3628287
复制相似问题