我尝试将客户端证书导入/安装到IE中,但我的js代码中出现以下错误。
function ImportClientCertificate()
{
try {
var objCertEnrollClassFactory = document.getElementById("objCertEnrollClassFactory");
var objEnroll = objCertEnrollClassFactory.CreateObject("X509Enrollment.CX509Enrollment");
var sPKCS7 = "-----BEGIN CERTIFICATE-----" +
"MIIDADCCAmkCCQ..." +
"-----END CERTIFICATE-----"
objEnroll.Initialize(1);
//->this line causes the exception
objEnroll.InstallResponse(3, sPKCS7, 1, "correctpassword");
}
catch (ex) {
alert(ex.description);
/*Exception being thrown: CertEnroll::CX509Enrollment::InstallResponse: Access is denied. 0x80070005 (WIN32: 5 ERROR_ACCESS_DENIED)*/
}
}
这种例外的原因是什么?我已经尝试将IE中的安全级别设置为低,但它没有帮助。手动将证书安装到用户私有证书库中可以正常工作。
非常感谢任何帮助。
答案 0 :(得分:1)
我很惊讶这对你有用!
我发现我必须将restrictions
参数(在您的示例中为3)更改为0或4.这是基于https://msdn.microsoft.com/en-us/library/windows/desktop/aa378051(v=vs.85).aspx上的MSDN文档:
E_ACCESSDENIED
此方法是从Web调用的,并且在Restrictions参数中指定了AllowNoOutstandingRequest或AllowUntrustedCertificate。
答案 1 :(得分:0)
经过两天的网络研究,我终于找到了如何让这个脚本运行起来。我在IE 11中找到的唯一解决方案是在IE设置框中启用以下选项。