0

在我的代码中,我有一个调用 JS 文件的按钮,该文件又调用一个 PHP 文件,该文件具有我需要生成证书的 API 端点,并将我在下面的证书变量中使用的响应发回。

我正在使用 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 文件并打开它(只需双击),证书值和证书链看起来都是正确的。

4

1 回答 1

0

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

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

它返回的 CSR 在顶部有一个----- BEGIN NEW CERTIFICATE REQUEST-----,在底部有一个-----END NEW CERTIFICATE REQUEST----- ,每个之后都有换行符线。

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

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

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

于 2019-10-16T23:26:45.597 回答