在我的代码中,我有一个按钮,该按钮调用JS文件,该按钮又调用一个PHP文件,该文件包含我需要生成证书的API端点,然后将响应发送回我在 certificate 中使用的下面的strong>变量。
我正在使用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文件并打开(简单双击),则证书值和证书链看起来都是正确的。
答案 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的格式有关。