尝试使用JS在浏览器上安装证书时出错

时间:2019-10-15 16:54:59

标签: javascript ssl certificate certenroll

在我的代码中,我有一个按钮,该按钮调用JS文件,该按钮又调用一个PHP文件,该文件包含我需要生成证书的API端点,然后将响应发送回我在 certificate 中使用的变量。

我正在使用openssl命令自己生成CSR。

我在浏览器上安装证书的代码如下(证书是我通过证书作为从Entrust API获得的响应的位置)-

我正在使用此页上的代码-https://blogs.msdn.microsoft.com/alejacma/2009/01/28/how-to-create-a-certificate-request-with-certenroll-javascript/(下面的第二个灰色块-下面的Javascript示例显示了如何从CA安装响应

function installCertificate(certificate) {
    try {
        var objEnroll = objCertEnrollClassFactory.CreateObject("X509Enrollment.CX509Enrollment");
        objEnroll.Initialize(1); // ContextUser

        objEnroll.InstallResponse(0, certificate, 6, "");

    } catch (ex) {
        swal('Error', 'Something went wrong installing Client Certificate', 'error');
        console.log("exception- " + ex.description);
    }
}

我的错误是(来自catch块)-

CertEnroll::CX509Enrollment::InstallResponse: Cannot find object or property. 0x80092004 (-2146885628 CRYPT_E_NOT_FOUND)

我不确定“找不到对象或属性”的含义,因为它不太冗长。

PS:如果我将来自API的响应另存为.crt文件并打开(简单双击),则证书值和证书链看起来都是正确的。

1 个答案:

答案 0 :(得分:0)

经过大量的拖网捕捞,我终于成功了。对于任何想知道的人,这是我的解决方案-

生成CSR的代码部分是此页上的第一个灰色块- https://blogs.msdn.microsoft.com/alejacma/2009/01/28/how-to-create-a-certificate-request-with-certenroll-javascript

返回的CSR在顶部具有 ---开始新证书请求----- ,在顶部具有 ----- END NEW CERTIFICATE REQUEST- ---- ,并在每行后换行

我使用如下所示的preg_replace删除了顶行和所有换行符,并且此时CSR没有换行符,只是一个简单的字符串,我使用str_replace删除了它的最后一部分。 / p>

$csr = preg_replace('/^.+\n/', '', $csr);  
$csr = str_replace("-----END NEW CERTIFICATE REQUEST-----","", $csr);

TLDR -从CSR中删除了顶行和底行以及所有的换行符。我认为这与CSR的格式有关。