2015-11-23 5 views
1

Мне нужно создать прокси-сервер, способный обрабатывать проверку сертификатов SSL. Я работал с библиотекой Node.js http-proxy для обработки проверки ssl. Моя проблема в том, что прокси-сервер ничего не делает для проверки того, имеет ли клиент правильные учетные данные.HTTP-прокси (Node.js) Не выполняется надлежащая проверка SSL

У меня есть прокси-сервер, и я передаю сервер options, у которого есть ssl certRequire = true и rejectUnauthroized = true. Тем не менее, клиент может подключиться к серверу с 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); 

Пожалуйста, дайте мне знать, если вам нужно какое-либо разъяснение!

***** ***** 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 

};

Даже при этом я все еще могу подключиться к прокси без сертификата.

ответ

1
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 и переместите эти параметры на верхний уровень.

+0

Так что даже когда я удаляю ssl и у меня все есть, прокси-сервер по-прежнему не обрабатывает прокси-сервер. Я сделал завиток, и я использовал свой браузер, и я все еще могу подключиться к прокси без сертификата. Я обновлю свой пост с новым кодом. –

+0

вы создаете сервер http. вам нужен вместо этого модуль 'https' (и вызывается' https.createServer') – Joe

+0

Итак, это сработало! Почему это так? Почему настройки прокси-сервера работают только на сервере https вместо HTTP-сервера? –