我的本地Windows 7计算机上运行了一个节点服务器(v0.10.20),它使用我的客户端证书向后端发出https请求。该请求在开始时工作,从一天到另一天,它停止使用错误消息:
[Error: 8432:error:14094415:SSL routines:SSL3_READ_BYTES:sslv3 alert certificate
expired:openssl\ssl\s3_pkt.c:1256:SSL alert number 45]
我没有更改任何编码,证书到期日期是2015年10月。此外,如果我从浏览器触发https请求而不是让nodejs执行此操作,则https请求仍然有效。有谁知道这可能是什么原因?
相关的nodejs编码看起来像这样,即使我不认为问题与编码有关。正如我所说,它在没有改变编码的情况下停止工作。
HTTPS请求
function callBackend(hostname, port, path, method, callback){
var options = {
hostname: hostname,
port: port,
path: path,
method: method,
pfx: SSOCertificate,
passphrase: SSOCertificatePassphrase,
rejectUnauthorized: false,
strictSSL: false,
};
var data = "";
var req = https.request(options, function(res) {
res.on('data', function(chunk) { data += chunk; });
res.on('end', function(){ callback(data); });
});
req.end();
req.on('error', function(e) {
console.error(e);
});
}
证书检索。我已经手动执行了这些步骤并硬编码到最终的pfx文件的路径。错误保持不变
if(process.platform == "win32") {
exec("certutil -store -user -v my", function (error, stdout, stderr) {
var serialNumber = getSSOCertSerialNumber(error, stdout, stderr);
var SSOCertificatePath = path.join(__dirname, '/SSOCert.pfx');
exec("certutil -f -user -p " + SSOCertificatePassphrase + " -exportPFX " + serialNumber + " \"" + SSOCertificatePath + "\"", function (error, stdout, stderr) {
var SSOCertificate = fs.readFileSync(SSOCertificatePath);
var deleteCommand = 'del "' + SSOCertificatePath + '"';
callback(SSOCertificatePassphrase, SSOCertificate);
});
});
}
答案 0 :(得分:0)
显然我执行这些步骤手册时出错了。连同certutil还返回“归档”证书(我无法通过Windows UI看到)和处理certutil返回的“Not After:”属性的错误这一事实,这导致我们提取错误证书的问题。错误的证书确实在一天前过期了。
所以nodejs或证书本身没有问题,我刚用certutil提取错误的证书。