为了账号安全,请及时绑定邮箱和手机立即绑定

使用https.request忽略node.js中无效的自签名ssl证书?

使用https.request忽略node.js中无效的自签名ssl证书?

呼如林 2019-08-30 14:20:08
我正在开发一个登录我本地无线路由器(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'.在节点中,捕获的错误是:{ [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”的操作?
查看完整描述

3 回答

?
冉冉说

TA贡献1877条经验 获得超1个赞

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


   var req = https.request({ 

      host: '192.168.1.1', 

      port: 443,

      path: '/',

      method: 'GET',

      rejectUnauthorized: false,

      requestCert: true,

      agent: false

    },


查看完整回答
反对 回复 2019-08-30
?
慕森王

TA贡献1777条经验 获得超3个赞

不要相信所有试图误导你的人。


在您的请求中,只需添加:


ca: [fs.readFileSync([certificate path], {encoding: 'utf-8'})]

如果您打开未经授权的证书,您将完全不受保护(因为没有验证身份而暴露给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

    },

请阅读这篇文章(披露:本答案作者撰写的博客文章),以便了解:


CA证书的工作原理

如何生成CA Certs以便轻松进行测试以模拟生产环境


查看完整回答
反对 回复 2019-08-30
  • 3 回答
  • 0 关注
  • 2557 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信