使用javascript在IE中导入客户端证书

时间:2014-09-10 17:19:18

标签: javascript internet-explorer ssl certificate

我尝试将客户端证书导入/安装到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中的安全级别设置为低,但它没有帮助。手动将证书安装到用户私有证书库中可以正常工作。

非常感谢任何帮助。

2 个答案:

答案 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设置框中启用以下选项。

ActiveX settings