javascript – 无论证书有效性如何,我的node.js https客户端始终有效

前端之家收集整理的这篇文章主要介绍了javascript – 无论证书有效性如何,我的node.js https客户端始终有效前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
此测试程序连接到https服务器并获取一些内容.我已经在浏览器和curl中检查了我的服务器,证书工作正常.如果我运行curl从服务器获取数据,它会正确地抱怨证书未知,除非我使用–cacert传递它或使用-k关闭安全性.

所以我遇到的问题是,虽然我认为我的客户端应该进行证书身份验证,而且我告诉它公共证书的位置,但它始终有效.如果我删除ca:选项,以便它不知道证书来自服务器,那么它默默地工作.我想捕获身份验证错误,但我似乎无法这样做.

var https = require('https');
var fs = require('fs');

function main() {

      var data = '';

      var get = https.get({
        path: '/',host: 'localhost',port: 8000,agent: false,ca: [ fs.readFileSync('https_simple/cacert.pem') ]

      },function(x) {

        x.setEncoding('utf8');
        x.on('data',function(c) {data += c});
        x.on('error',function(e) {
          throw e;
        });
        x.on('end',function() {
          console.log('Hai!. Here is the response:');
          console.log(data);
        });

      });

      get.on('error',function(e) {throw e});

      get.end();

    }

main();

解决方法

为了完成这项工作,我需要升级到v0.7.8(尽管任何v0.7应该没问题),其中rejectUnauthorized功能添加到https.get

需要这些选项组合:

agent: false,// or you can supply your own agent,but if you don't you must set to false
rejectUnauthorized: true,ca: [ fs.readFileSync('https_simple/cacert.pem') ]

现在,如果身份验证失败,您将收到“错误”事件,请求将不会继续.

有关制作自己的代理的详细信息,请参阅https.request documentation

错误修复已在此更改中提交:https://github.com/joyent/node/commit/f8c335d0

猜你在找的JavaScript相关文章