【问题标题】:https request from node server using client certificate reports expired certificate来自节点服务器的 https 请求使用客户端证书报告过期证书
【发布时间】: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


    【解决方案1】:

    显然我在手动执行这些步骤时犯了一个错误。再加上 certutil 还返回“归档”证书(我无法通过 Windows UI 看到)以及处理 certutil 返回的“Not After:”属性的错误,这导致了我们提取错误证书的问题。错误的证书确实在一天前过期。

    所以nodejs或证书本身没有问题,我只是用certutil提取了错误的证书。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-09-05
      • 2015-04-30
      • 2015-07-31
      • 2015-10-19
      • 2016-12-10
      • 2017-01-02
      • 2012-09-28
      相关资源
      最近更新 更多