【发布时间】: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: false和opts.agent = new https.Agent(opts);,但都没有工作:-( -
您确定您拥有正确的证书吗?您的代码使用自签名证书对我有用。如果我为
opts.ca读取了不同的(不正确的)证书,那么我会得到Error: DEPTH_ZERO_SELF_SIGNED_CERT]. -
@rhashimoto 我认为这是我需要的提示。不是 HTTPS 证书是自签名的,而是服务器证书是自签名的。谢谢!