【问题标题】:How do I trust a self signed cert using https?如何信任使用 https 的自签名证书?
【发布时间】:2014-06-10 13:38:09
【问题描述】:

编辑:我原本以为服务器的证书是自签名的。原来它是由自签名 CA 证书签名的。

我正在尝试编写一个 Node.js 应用程序,该应用程序访问一个使用由私有自签名 CA 证书签名的 自签名证书 证书保护的 HTTPS 站点。我还想完全禁用证书检查。

我尝试将 自签名证书 服务器的证书放在请求选项中,但这似乎不起作用。有人知道怎么做吗?

我希望下面的代码打印statusCode 200,但它却打印[Error: SELF_SIGNED_CERT_IN_CHAIN]

我用request 尝试了类似的代码,结果相同。

var https = require('https');
var fs = require('fs');

var opts = {
    hostname: host,
    port: 443,
    path: '/',
    method: 'GET',
    ca: fs.readFileSync(serverCertificateFile, 'utf-8')
};

var req = https.request(opts, function (res) {
    console.log('statusCode', res.statusCode);
});

req.end();
req.on('error', function (err) {
    console.error(err);
});

【问题讨论】:

  • 我想这可能对你有用:stackoverflow.com/questions/10142431/…
  • @vcazan 我尝试同时添加agent: falseopts.agent = new https.Agent(opts);,但都没有工作:-(
  • 您确定您拥有正确的证书吗?您的代码使用自签名证书对我有用。如果我为opts.ca 读取了不同的(不正确的)证书,那么我会得到Error: DEPTH_ZERO_SELF_SIGNED_CERT].
  • @rhashimoto 我认为这是我需要的提示。不是 HTTPS 证书是自签名的,而是服务器证书是自签名的。谢谢!

标签: node.js ssl https


【解决方案1】:

错误[Error: SELF_SIGNED_CERT_IN_CHAIN] 是这里发生了什么的线索。

这表明 HTTPS 服务器的证书是由自签名证书签名的,而不是它本身就是自签名证书。如果服务器证书是自签名的,则错误为[Error: DEPTH_ZERO_SELF_SIGNED_CERT]

如果您提供 CA 证书而不是服务器的证书,它应该可以工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-04
    • 1970-01-01
    • 2016-09-13
    • 1970-01-01
    • 2018-03-10
    • 2016-11-29
    • 2019-09-03
    相关资源
    最近更新 更多