首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法使用CertEnroll在Windows 7上安装证书

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

Stack Overflow用户
提问于 2010-09-02 14:49:27
回答 2查看 13.2K关注 0票数 1

我们有一个现有的证书颁发应用程序(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的一个片段:

代码语言: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中使用过吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-09-03 14:31:06

解决方案是安装修复KB 2078942

请注意,此修补程序并不声称修复了此问题,但它确实解决了此问题!更确切地说是结婚,否则我会更早地遇到它:-/

我相信这是一个来自Vista的回归错误,因为有一个用于Vista的热修复来解决我所遇到的确切问题。

谢谢你和上一票人昨天花时间帮我解决了这件事。

票数 2
EN

Stack Overflow用户

发布于 2010-09-02 16:25:06

不久前,我为演示编写了这个剧本 (与此页一起编写)。它支持<keygen/>,并在Internet上用XEnroll或CertEnroll调用替换它。这个项目已经有了一些进展,但是我刚刚在Windows7上用这支测试了IE8,它起了作用。CA证书根本不在客户端机器上。为了运行ActiveX,我不得不将安全设置降低到“低”(否则,它甚至不会提交请求,所以更不用说在响应中安装证书)。

如果这有帮助的话,我会这样做:

代码语言:javascript
复制
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.");
    }
}

我必须承认,我没有测试使用了这两种情况中的哪一种(因为这是相同的警告信息)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3628287

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档