javascript - 无法使用 CertEnroll 在 Windows 7 上安装证书

标签 javascript windows-7 internet-explorer-8 certificate certenroll

我们有一个现有的证书颁发应用程序(C#、ASP.NET、JavaScript),它向在 IE 中使用 XenRoll 的 Windows XP 用户颁发证书。我需要扩展它以支持 Windows Vista 和 Windows 7 用户,也使用 IE。

对于 Vista 和 7,Microsoft 将 XenRoll ActiveX 控件替换为新的 CertEnroll 控件。我已经在 Vista SP2 中使用了它,但是在 7 中我在安装步骤中遇到了这个错误:

CertEnroll::CX509Enrollment::InstallResponse: A certificate chain processed, but terminated in a root certificate which is not trusted by the trust provider. 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 中使用它吗?

最佳答案

解决方案是安装 hotfix KB 2078942 .

请注意,此修补程序并未声称可以解决此问题,但确实可以解决!相当烦人,否则我会更早地遇到它:-/

我相信这是 Vista 的回归错误,因为有一个 hotfix让 Vista 修复我遇到的确切问题。

非常感谢 Bruno 昨天花时间帮助我解决这个问题。

关于javascript - 无法使用 CertEnroll 在 Windows 7 上安装证书,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3628287/

相关文章:

javascript - JsTree 的节点未使用在 IE 中的类型插件中指定的图标

html - Internet Explorer 8 忽略 'display: table-cell' 元素的宽度

javascript - 无法获取 handleClick 函数来调用其他函数,而不是自行完成它们所做的工作

javascript - javascript window.print() 的 Safari 打印问题

javascript - 当轴标签映射为刻度域的一部分时,如何在 d3 中修改堆积条形图的轴标签

javascript - 如何将样式注入(inject) IE8?

javascript - React 渲染数组键和对象

c# - 使用 C# TaskScheduler 库创建的 .job 文件在 Windows 7 中是否已过时?

mysql - WampServer - mysqld.exe 无法启动,因为缺少 MSVCR120.dll

git - 在 Posh-Git 中更改 "git status"输出颜色