我遇到客户端https请求的问题。
代码段可能如下所示:
var fs = require('fs');
var https = require('https');
var options = {
hostname: 'someHostName.com',
port: 443,
path: '/path',
method: 'GET',
key: fs.readFileSync('key.key'),
cert: fs.readFileSync('certificate.crt')
}
var requestGet = https.request(options, function(res){
console.log('resObj', res);
}
我得到的是错误:证书链中的自签名证书。
当我使用邮递员时,我可以导入客户端证书和密钥并使用它没有任何问题。有没有解决方案?我还希望了解邮递员如何处理证书和工作。
答案 0 :(得分:17)
您需要添加*
作为环境变量。
答案 1 :(得分:6)
您可以编写命令 npm config set strict -ssl = false
答案 2 :(得分:3)
对于 Nodemailer:
添加
tls: {
rejectUnauthorized: false
}
解决了我的问题。
整体代码看起来像这样:
nodemailer.createTransport({
host: process.env.MAIL_SERVER,
secure: false,
port: 587,
auth: {
user: process.env.MAIL_USERNAME,
pass: process.env.MAIL_PASSWORD
},
tls: {
rejectUnauthorized: false
}
}
答案 3 :(得分:2)
关闭验证是非常危险的事情。验证证书要好得多。
您可以使用options对象的ca
键将证书颁发机构证书放入请求中,如下所示:
let opts = {
method: 'GET',
hostname: "localhost",
port: listener.address().port,
path: '/',
ca: await fs.promises.readFile("cacert.pem")
};
https.request(opts, (response) => { }).end();
我将整个演示放在一起,以便您了解如何构建SSL测试。
是here。
答案 4 :(得分:2)
对于它的价值,花了一天半的时间来追踪它,结果证明错误是由IT公司必须禁用的我公司的防火墙设置引起的。互联网上的任何地方都无法解决此问题。
答案 5 :(得分:0)
您可以使用NODE_TLS_REJECT_UNAUTHORIZED = 0或
解决此问题process.env['NODE_TLS_REJECT_UNAUTHORIZED'] = 0;
它可以工作,但这是一个hack修复程序。
如果您使用的是Windows,则可以从命令行执行以下操作:
设置NODE_TLS_REJECT_UNAUTHORIZED = 0
然后
npm install [mypackage]
答案 6 :(得分:0)
节点应用程序需要将 CA 证书添加到现有的 CA (Mozilla) 证书中。
我们使用服务启动节点,并添加环境变量 NODE_EXTRA_CA_CERTS
[Service]
Restart=always
User=<...>
Group=<...>
Environment=PATH=/usr/bin:/usr/local/bin
Environment=NODE_ENV=production
Environment=NODE_EXTRA_CA_CERTS=/<...>/.ssl/extra_certs.pem
WorkingDirectory=/<...>
ExecStart=/usr/bin/node -r dotenv/config /<.....>/server.js dotenv_config_path=/<....>/.env
这样我们就可以使用相同的应用程序来调用使用流行 CA 或我们自己的自签名证书的服务,而且我们不必关闭 SSL 检查。
在 linux 中有一个简单的方法来获取证书,使用这个帖子:Use self signed certificate with cURL?
您使用以下方法创建证书:
$ echo quit | openssl s_client -showcerts -servername server -connect server:443 > cacert.pem
然后将该 .pem 文件复制为 extra_cert.pem。您只能有一个 pem 文件,但您可以将多个 pem 文件附加到一个文件中。
我希望这对某人有所帮助,我花了一段时间才找到使这项工作正常工作的不同部分。