Совместимость NodeJS 12.2 TLS с HTTPS - PullRequest
0 голосов
/ 22 мая 2019

Я просто смотрю, как перестраивать то, что, по-видимому, является критическим изменением с NodeJS 12.2+ (изменение произошло в 11.9 +).

Мне удалось получить данные из начальной функции после некоторой странной, на первый взгляд, неподходящей дискотекитанцевать с resumeSession (3 раза из свежей сессии со случайными идентификаторами) и newSession (2 вызова после обратного вызова createServer, не имеющего формат аргумента 'request' & 'response'), и сокетом, записывающим некоторые данные, а также вызывающим socket.end () для завершения этого, что позволяет клиенту отправлять необработанные заголовки в виде данных [видно через .toString ()]

Итак, я получаю «GET /» с заголовками, но хотел бы вызвать ту же функцию, которую яделали это раньше в нодкале https 11.8 обратного вызова createServer 'https', который имеет аргументы 'request' и 'response' [aka in / out].

GET / HTTP/1.1
Host: 192.168.1.2
Connection: keep-alive
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.157 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.9

Какой код должен был быть вызван прежде, чтобы сделать вызовкак это было до этого критического изменения TLS 1.3 и как он работает с «tls» вместо «https»?

Это суперсбивает с толку то, что это совершенно новое и недокументированное значение, но реальных примеров пока не найдено.

Возможно, я пропустил настройку какого-либо другого «события» для прослушивания («сессия»?).У моего примера есть то, что кажется вызовом по умолчанию cb () (возможно внутренним, называемым «done»), переданным newSession и resumeSession.

Я пытался найти stringToIncomingMessage, но теперь его нет.В 12.3 docs есть класс входящийMessage, но неясно, как с этим преобразовать то, что исходит из сокета tls.https://nodejs.org/api/http.html#http_class_http_incomingmessage

Я закончил тем, что делал это на основе другого потока.

let convMessage = function ( msg, sock ) {
    let tmp, hdrz = {};
    const res = { headers: hdrz };
    const regex = /([\w-]+): (.*)/g;
    while ( tmp = regex.exec( msg ) ) {
        hdrz[ tmp[ 1 ].toLowerCase() ] = tmp[ 2 ];
    }
    tmp = msg.match( /(\w+)\s+(.*?)\s+(.*)/ );
    res.method = tmp[ 1 ];
    res.url = tmp[ 2 ];
    res.httpVersion = tmp[ 3 ];
    res.connection = { socket: sock };
    res.socket = sock;

    return res;
};

К сожалению, это было только начало моих проблем.Тогда у sock нет writeHead, поэтому я попытался записать строку, перенаправление и т. Д., И он возвращается, говоря ...

process uncaughtException:EPIPE
uncaughtException: Error: This socket has been ended by the other party

Так что я действительно делаю не то здесь.

Проблема в том, что даже сейчас я попробовал 12.3.1, и последние изменения заключаются в том, что он не будет работать так, как он используется с https в nodejs 11.8 (после этого с openssl 1.1.1, и я предполагаю, что TLS 1.3 полностью сломан. Может быть,они выяснят это позже.

Это делает это ... см. https://github.com/nodejs/node/issues/27213

process uncaughtException:ERR_SSL_CIPHER_PARAMETER_ERROR
uncaughtException: [Error: 139649045071680:error:060CC07A:digital envelope routines:EVP_CIPHER_asn1_to_param:cipher parameter error:../deps/openssl/openssl/crypto/evp/evp_lib.c:81:
] {
  library: 'digital envelope routines',
  function: 'EVP_CIPHER_asn1_to_param',
  reason: 'cipher parameter error',
  code: 'ERR_SSL_CIPHER_PARAMETER_ERROR'
}
...