Geu*_*uis 279 https ssl-certificate node.js
我正在开发一个登录我本地无线路由器(Linksys)的小应用程序,但我遇到了路由器的自签名证书问题.
我运行wget 192.168.1.1并得到:
ERROR: cannot verify 192.168.1.1's certificate, issued by `/C=US/ST=California/L=Irvine/O=Cisco-Linksys, LLC/OU=Division/CN=Linksys/emailAddress=support@linksys.com':
Self-signed certificate encountered.
ERROR: certificate common name `Linksys' doesn't match requested host name `192.168.1.1'.
To connect to 192.168.1.1 insecurely, use `--no-check-certificate'.
Run Code Online (Sandbox Code Playgroud)
在节点中,捕获的错误是:
{ [Error: socket hang up] code: 'ECONNRESET' }
Run Code Online (Sandbox Code Playgroud)
我目前的示例代码是:
var req = https.request({
host: '192.168.1.1',
port: 443,
path: '/',
method: 'GET'
}, function(res){
var body = [];
res.on('data', function(data){
body.push(data);
});
res.on('end', function(){
console.log( body.join('') );
});
});
req.end();
req.on('error', function(err){
console.log(err);
});
Run Code Online (Sandbox Code Playgroud)
我怎样才能让node.js做相当于"--no-check-certificate"的操作?
Jua*_*nra 559
廉价和不安全的答案:
加
process.env["NODE_TLS_REJECT_UNAUTHORIZED"] = 0;
Run Code Online (Sandbox Code Playgroud)
在代码中,在调用之前 https.request()
在这个问题中回答了一种更安全的方法(上面的解决方案使得整个节点过程不安全)
小智 155
在您的请求选项中,请尝试包含以下内容:
var req = https.request({
host: '192.168.1.1',
port: 443,
path: '/',
method: 'GET',
rejectUnauthorized: false,
requestCert: true,
agent: false
},
Run Code Online (Sandbox Code Playgroud)
Hes*_*sin 55
不要相信所有试图误导你的人.
在您的请求中,只需添加:
ca: [fs.readFileSync([certificate path], {encoding: 'utf-8'})]
Run Code Online (Sandbox Code Playgroud)
如果打开了未经授权的证书,您将无法在所有的(暴露MITM不确认身份)的保护,并没有SSL工作将不会有大的差别.解决方案是指定您期望的CA证书,如下一个代码段所示.确保证书的公用名与您在请求中调用的地址相同(如主机中指定的):
你将得到的是:
var req = https.request({
host: '192.168.1.1',
port: 443,
path: '/',
ca: [fs.readFileSync([certificate path], {encoding: 'utf-8'})],
method: 'GET',
rejectUnauthorized: true,
requestCert: true,
agent: false
},
Run Code Online (Sandbox Code Playgroud)
请阅读这篇文章(披露:本答案作者撰写的博客文章),以便了解:
Arm*_*and 50
添加以下环境变量:
NODE_TLS_REJECT_UNAUTHORIZED=0
Run Code Online (Sandbox Code Playgroud)
例如export
:
export NODE_TLS_REJECT_UNAUTHORIZED=0
Run Code Online (Sandbox Code Playgroud)
(非常感谢Juanra)
Iam*_*ker 13
添加到@Armand回答:
添加以下环境变量:
NODE_TLS_REJECT_UNAUTHORIZED = 0例如导出:
导出NODE_TLS_REJECT_UNAUTHORIZED = 0(非常感谢Juanra)
如果您使用Windows:
set NODE_TLS_REJECT_UNAUTHORIZED=0
Run Code Online (Sandbox Code Playgroud)
Edu*_*rdo 10
您还可以使用默认选项创建请求实例:
require('request').defaults({ rejectUnauthorized: false })
Run Code Online (Sandbox Code Playgroud)
小智 8
因此,我的公司刚刚切换到 Node.js v12.x。我正在使用NODE_TLS_REJECT_UNAUTHORIZED
,它停止工作了。经过一番挖掘后,我开始使用NODE_EXTRA_CA_CERTS=A_FILE_IN_OUR_PROJECT
具有 PEM 格式的自签名证书,并且我的所有脚本都再次运行。
因此,如果您的项目有自签名证书,也许这个环境变量会对您有所帮助。
参考: https: //nodejs.org/api/cli.html#cli_node_extra_ca_certs_file
归档时间: |
|
查看次数: |
292509 次 |
最近记录: |