2014-02-11 4 views
0

Я пытаюсь создать прокси-сервер HTTPS в Node.JS v0.10.24 с использованием самозаверяющего сертификата. Вот код, я использую:Прокси HTTPS с самозаверяющим сертификатом в Node.JS

var https = require('https'); 

var server = https.createServer({ 
    key: fs.readFileSync('key.pem'), 
    cert: fs.readFileSync('cert.pem') 
}); 

server.on('request', function(req, res) { 
    res.end('hello'); 
}); 

server.listen(8080); 

Этот сервер корректно загружается и доступна через https://localhost:8080. Однако, когда я устанавливаю его как прокси-сервер HTTPS (в Mac OS X), сервер выдает connection событий, но никогда не испускает ни request, ни error, что приводит к тому, что соединение будет вешать бесконечно и в конечном итоге заканчивается.

+0

Какой клиент делает запрос? Отправляет ли он 'Content-Length'? Отсутствие «Content-Length» означает, что прокси не знает, когда заканчивается запрос. Некоторые, такие как Flash, будут лежать относительно размера запроса, установив его на что-то вроде 64K. Таким образом, сервер ждет всех 64K, хотя запрос меньше 2K. – jww

+0

Chrome, Firefox и Safari на OS X Moutain Lion. –

ответ

1

Я столкнулся с той же проблемой на своем Macbook. Проблема заключается в том, что параметр прокси-сервера в OSX использует метод HTTP CONNECT для туннелирования запросов HTTPS.

Вкратце, это означает, что вам нужно сделать свой сервер экземпляром http.Server и обработать событие connect, которое будет включать пересылку трафика сокета TCP.

Я знаю, что этот ответ немного запоздалый, но я написал собственный HTTP-прокси-сервер, на который вы можете ссылаться: https://github.com/robu3/purokishi. Конкретный раздел, охватывающий метод connect, составляет here.

Смежные вопросы