【发布时间】:2014-01-29 05:00:36
【问题描述】:
我有一个节点服务器 (v0.10.20) 在我的本地 Windows 7 机器上运行,它使用我的客户端证书向后端发出 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 执行它,它仍然有效。有谁知道这可能是什么原因?
相关的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);
});
});
}
【问题讨论】:
标签: node.js ssl https certificate