HTTP代理(Node.js)不执行正确的SSLvalidation
我需要创build一个能够处理SSL证书validation的代理服务器。 我一直在使用Node.js的http-proxy
库来处理sslvalidation。 我的问题是代理服务器没有做任何事情来validation客户端是否有适当的凭据。
我有一个代理服务器,我传递的ssl certRequire = true
和rejectUnauthroized = true
的服务器options
。 但是,客户端能够连接到没有证书/密钥的服务器,我不知道为什么。
这是我的代码:
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);
请让我知道如果你需要任何澄清!
***** UPDATE *****
这是我删除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
部分,并将这些选项移到顶层。