node.js - HTTP 代理 (Node.js) 未执行正确的 SSL 验证

标签 node.js ssl proxy node-http-proxy

我需要创建一个能够处理 SSL 证书验证的代理服务器。我一直在使用 Node.js 的 http-proxy 库来处理 ssl 验证。我的问题是代理服务器在验证客户端是否具有正确的凭据方面没有做任何事情。

我有一个代理服务器,我传递了具有 ssl certRequire = truerejectUnauthroized = true 的服务器 options。但是,客户端能够使用 no 证书/ key 连接到服务器,我不确定为什么。

这是我的代码:

 var options = {
        ssl: {
        key:   fs.readFileSync('/Users/grantherman/Desktop/ssl_certificates/client1-key.pem'),
        cert: fs.readFileSync('/Users/grantherman/Desktop/ssl_certificates/client1-crt.pem'),
        requestCert: true,
        rejectUnauthorized: true
    }   
};

var proxy = new httpProxy.createProxyServer(options);



http.createServer(function (req, res) {
  setTimeout(function () {
    proxy.web(req, res, {
        target: {
        host: 'localhost',
        port: 9002
        }
});
  }, 200);
}).listen(8002);

//Server
http.createServer(function (request, response) {

//Handles the response
response.writeHead(200, {'Content-Type': 'text/plain'});
response.write('request successfully proxied to server');
response.end();


response.on('data', function(data){
    console.log(data);
});

response.on('end', function(){
    console.log("end");
});

response.on('error', function(err){
    console.log(err);
});
}).listen(9002);

如果您需要任何说明,请告诉我!

*****更新*****

这是我删除 ssl 对象后的代码。

var options = {
        key: fs.readFileSync('/Users/grantherman/Desktop/ssl_certificates/client1-key.pem'),
        cert: fs.readFileSync('/Users/grantherman/Desktop/ssl_certificates/client1-crt.pem'),
        requestCert: true,
        rejectUnauthorized: false

};

即便如此,我仍然可以在没有证书的情况下连接到代理。

最佳答案

 var options = {
        ssl: {
        key:   fs.readFileSync('/Users/grantherman/Desktop/ssl_certificates/client1-key.pem'),
        cert: fs.readFileSync('/Users/grantherman/Desktop/ssl_certificates/client1-crt.pem'),
        requestCert: true,
        rejectUnauthorized: true
    }   
};

问题在于您的嵌套——这些选项不存在于 ssl 对象中,它们是 options 中的顶级项目。取出内部 ssl 部分并将这些选项移至顶层。

关于node.js - HTTP 代理 (Node.js) 未执行正确的 SSL 验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33881150/

相关文章:

mysql - Angularjs Node js mysql 增删改查

postgresql - 无法将 SSL 安全数据库连接到 typeorm

spring - 为什么自调用不适用于 Spring 代理(例如使用 AOP)?

linux - 使用 cURL 执行 HTTP 请求(使用 PROXY)

javascript - 没有从 ajax 得到响应,进入错误函数

javascript - jade 使用 javascript 变量(mongo 模型)

javascript - 在 dynamodb 中使用 batchWriteItem

angular - 在 Http 主机不工作的情况下获取用户位置

python - Graphlab get_dependencies() SSL 证书验证失败

java - 在 Play Framework 2.2.x 中设置代理选项时 WS.url 失败