NodeJS 12.2 TLS与HTTPS的兼容性

时间:2019-05-22 08:53:21

标签: node.js tls1.3

我只是在考虑重建似乎是NodeJS 12.2+的重大更改(重大更改发生在11.9+中)。

在一些奇怪的看似不合适的迪斯科舞后,我成功地从初始函数中获取了数据,其中包括履历表简历(从具有随机ID的新会话中获得了3次)和新会话(在createServer回调后两次调用,其中没有'request'和'响应的参数格式),然后套接字写入一些数据,然后调用socket.end()结束该操作,从而使客户端可以将原始标头作为数据发送[通过.toString()查看

因此,我得到带有标题的“ GET /”,但想调用之前在nodejs 11.8的“ https” createServer回调中执行的相同函数,该回调具有“ request”和“ response”参数[aka in /出]。

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”一起使用?

完全是新的且没有记录,这非常令人困惑,这意味着还没有真正的例子。

我可能错过了配置其他一些“事件”来监听(“会话”?)的可能性。我有的示例似乎是传递给newSession和resumeSession的默认Callback cb()(可能在内部称为“ done”)。

我试图找到stringToIncomingMessage,但是现在不见了。在12.3文档中,有一个entryMessage类,但尚不清楚如何用它来转换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;
};

不幸的是,这仅仅是我问题的开始。 然后,袜子没有writeHead,所以我试图用字符串写重定向等,然后它又说...

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

所以我在这里做错了。

问题甚至是现在我已经尝试了12.3.1,而重大的更改是它无法像在nodejs 11.8中使用https一样工作(此后使用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'
}

0 个答案:

没有答案