Выпустите рукопожатие SSL с собственным прокси https на NodeJS - PullRequest
0 голосов
/ 06 октября 2018

Я пытаюсь работать на своем собственном HTTPS-прокси и не могу создать свой https-сервер. Во время инициализации подключения появляется следующее сообщение об ошибке: «tlsClientError Ошибка: 101057795: ошибка: 1407609B: Подпрограммы SSL: SSL23_GET_CLIENT_HELLO: запрос прокси https: openssl \ ssl \ s23_srvr.c: 400 ".

Под узлом JS исходный код:

private runHttpsServer() {
const instance = this;
const cert = fs.readFileSync("./certificate/server.crt", "utf8");
const key = fs.readFileSync("./certificate/key.pem", "utf8");
const options : https.ServerOptions = {
    cert: cert,
    key: key
};
const httpsServer = https.createServer(options, (req, res)=>{
    console.log("Request ...");
    instance.handleRequest.call(instance, req, res);     
});
httpsServer.on("tlsClientError", (err : Error, tlsSocket : TLSSocket)=>{
    console.log("tlsClientError", err.stack);
});
httpsServer.listen(7001);

}

Когда я просматриваю" https://localhost:7001/" напрямую без моего прокси-сервера, у меня не возникает ошибка рукопожатия SSL. Когда я захожу на другой веб-сайт по всему прокси-серверу, у меня возникает эта ошибка SSL рукопожатия.

Кто-то уже сталкивался с этой проблемой? Некоторые могут мне помочь?

1 Ответ

0 голосов
/ 06 октября 2018

Похоже, вы неправильно поняли, как работает прокси HTTPS.Дело не в том, что клиент будет устанавливать TLS-соединение с прокси-сервером, как вы предполагаете, но вместо этого клиент будет отправлять простой HTTP-запрос с методом CONNECT на прокси-сервер, чтобы прокси-сервер установил туннель к целевому хосту.Затем клиент обновит этот туннель до TLS и, таким образом, получит сквозную защиту между клиентом и конечным сервером.

В сети это будет выглядеть примерно так (точное сообщение может немного отличаться - см. RFC 2817 для подробной информации):

 Client ------------------------> Proxy
 - create TCP connection
 - send to proxy:
   > CONNECT google.com:443 HTTP/1.0\r\n
   > \r\n                  

                                  Proxy -----------------------------> Server
                                  - create TCP connection

 Client <------------------------ Proxy
 - send to client
   < HTTP/1.0 200 Connection established\r\n
   < \r\n

 Client <------------------------(Proxy)-----------------------------> Server
   use tunnel from client to server through proxy to
   - make the end-to-end TLS handshake
   - transfer the HTTP messages within the TLS connection 

... Подпрограммы SSL: SSL23_GET_CLIENT_HELLO: запрос прокси https: ...

Это сообщение об ошибкепо сути, говорит, что ваш прокси-сервер ожидал начала рукопожатия TLS (ClientHello), но вместо этого получил запрос прокси https, то есть CONNECT ....Вам нужно исправить свой прокси, чтобы правильно обрабатывать запросы прокси https, которые работают, как я описал.

...