HTTP 代理(Node.js)未执行正确的 SSL 验证
HTTP Proxy( Node.js) Not Performing Proper SSL Verification
我需要创建一个能够处理 SSL 证书验证的代理服务器。我一直在使用 Node.js 的 http-proxy
库来处理 ssl 验证。我的问题是代理服务器在验证客户端是否具有正确的凭据方面没有做任何事情。
我有一个代理服务器,我通过了具有 ssl certRequire = true
和 rejectUnauthroized = true
的服务器 options
。但是,客户端能够使用 no cert/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
部分并将这些选项移至顶层。
我需要创建一个能够处理 SSL 证书验证的代理服务器。我一直在使用 Node.js 的 http-proxy
库来处理 ssl 验证。我的问题是代理服务器在验证客户端是否具有正确的凭据方面没有做任何事情。
我有一个代理服务器,我通过了具有 ssl certRequire = true
和 rejectUnauthroized = true
的服务器 options
。但是,客户端能够使用 no cert/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
部分并将这些选项移至顶层。