我正在开发一个登录到我本地无线路由器(Linksys)的小应用程序,但我遇到了路由器的自签名SSL证书的问题。
我运行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'.
在节点中,捕获的错误为:
{ [Error: socket hang up] code: 'ECONNRESET' }
我当前的示例代码是:
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);
});
我如何才能让node.js执行等同于“--no-check-certify”的操作?
10条答案
按热度按时间b1payxdu1#
廉价且不安全的答案:
增列
在代码中,在调用
https.request()
之前在这个问题中回答了一种更安全的方式(上面的解决方案使整个节点过程不安全)
wxclj1h52#
在您的请求选项中,尝试包括以下内容:
kcrjzv8t3#
不要相信所有试图误导你的人。
在您的请求中,只需添加:
如果启用未经授权的证书,您将完全不受保护(由于不验证身份而暴露于MITM),并且在不使用SSL的情况下工作不会有太大区别。解决方案是指定您期望的CA证书,如下一个代码片断所示。确保证书的通用名称与您在请求中调用的地址(如主机中指定的地址)相同:
那么你将得到的是:
请阅读this article(披露:此答案作者撰写的博客文章),以了解:
wqnecbli4#
Add the following environment variable:
e.g. with
export
:(with great thanks to Juanra)
xqk2d5yq5#
添加到@Armand答案:
添加以下环境变量:
NODE_TLS_REJECT_AUTHORIZED=0,例如,使用EXPORT:
EXPORT NODE_TLS_REJECT_AUTHORIZED=0(非常感谢Juanra)
如果您使用Windows:
Thanks to: @weagle08
ohfgkhjo6#
您还可以使用默认选项创建请求示例:
ltqd579y7#
对于temJS,您可以使用npmRequestOptions进行设置。
cigdeys38#
尝试导出节点_TLS_REJECT_AUTHORIZED=0
2ic8powd9#
或者,您可以尝试在本地名称解析(在大多数操作系统的
etc
目录中找到的hosts
文件,细节有所不同)中添加如下内容:接下来是
会奏效的。
mnowg1ta10#
所以,我的公司刚刚改用Node.js v12.x。我在使用
NODE_TLS_REJECT_UNAUTHORIZED
,但它停止工作了。经过一些挖掘,我开始使用NODE_EXTRA_CA_CERTS=A_FILE_IN_OUR_PROJECT
,它具有我们自签名证书的PEM格式,并且我的所有脚本都可以再次工作。因此,如果您的项目具有自签名证书,则此env var可能会对您有所帮助。
参考:https://nodejs.org/api/cli.html#cli_node_extra_ca_certs_file