我正在开发一个小应用程序,可以登录到我的本地无线路由器(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'.

在node中,被捕获的错误是:

{ [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-certificate”?


当前回答

你也可以用默认选项创建一个请求实例:

require('request').defaults({ rejectUnauthorized: false })

其他回答

你也可以用默认选项创建一个请求实例:

require('request').defaults({ rejectUnauthorized: false })

所以,我的公司刚刚切换到Node.js v12.x。 我未经授权使用node_tls_reject_,它停止工作。 经过一番挖掘,我开始使用NODE_EXTRA_CA_CERTS=A_FILE_IN_OUR_PROJECT,它具有自签名证书的PEM格式,所有脚本都重新工作了。

所以,如果你的项目有自签名的证书,也许这个env var会帮助你。

裁判:https://nodejs.org/api/cli.html # cli_node_extra_ca_certs_file

廉价又不可靠的回答:

Add

process.env["NODE_TLS_REJECT_UNAUTHORIZED"] = 0;

在代码中,在调用http .request()之前

一个更安全的方法(上面的解决方案使整个节点进程不安全)在这个问题中得到了回答

在您的请求选项中,尝试包括以下内容:

   var req = https.request({ 
      host: '192.168.1.1', 
      port: 443,
      path: '/',
      method: 'GET',
      rejectUnauthorized: false,
      requestCert: true,
      agent: false
    },

补充@Armand的回答:

添加如下环境变量: NODE_TLS_REJECT_UNAUTHORIZED=0例如: export NODE_TLS_REJECT_UNAUTHORIZED=0(非常感谢Juanra)

如果你了解windows的使用情况:

set NODE_TLS_REJECT_UNAUTHORIZED=0

感谢:@weagle08