> Чем так плох TLS 1.3?Он хороший, но тут его нет, к сожалению.
Больше года не хотели обновлять, потому что он ломал сранную ноду!
И больше года понадобилось чтобы выкатить гениально-сложный пач
https://build.opensuse.org/request/show/701128
+commit 8dd8033519658bba2d7b776ec166f889a56bce31
+Author: Shigeki Ohtsu <ohtsu@ohtsu.org>
+Date: Wed Sep 12 17:34:24 2018 +0900
+
+ tls: workaround handshakedone in renegotiation
+
+ `SSL_CB_HANDSHAKE_START` and `SSL_CB_HANDSHAKE_DONE` are called
+ sending HelloRequest in OpenSSL-1.1.1.
+ We need to check whether this is in a renegotiation state or not.
+
+ Backport-PR-URL: https://github.com/nodejs/node/pull/26270
+ PR-URL: https://github.com/nodejs/node/pull/25381
+ Reviewed-By: Daniel Bevenius <daniel.bevenius@gmail.com>
+ Reviewed-By: Shigeki Ohtsu <ohtsu@ohtsu.org>
+
+diff --git a/src/tls_wrap.cc b/src/tls_wrap.cc
+index b5eff38358..0ec66fc467 100644
+--- a/src/tls_wrap.cc
++++ b/src/tls_wrap.cc
+@@ -221,7 +221,10 @@ void TLSWrap::SSLInfoCallback(const SSL* ssl_, int where, int ret) {
+ }
+ }
+
+- if (where & SSL_CB_HANDSHAKE_DONE) {
++ // SSL_CB_HANDSHAKE_START and SSL_CB_HANDSHAKE_DONE are called
++ // sending HelloRequest in OpenSSL-1.1.1.
++ // We need to check whether this is in a renegotiation state or not.
++ if (where & SSL_CB_HANDSHAKE_DONE && !SSL_renegotiate_pending(ssl)) {
+ c->established_ = true;
+ Local<Value> callback = object->Get(env->onhandshakedone_string());
+ if (callback->IsFunction()) {
А после этого пача и принятия в Tumbleweed, оказалось, что только в русской и украинской локалях, начиная с 1.1.0i все приложения использующие openssl крашились.
https://bugzilla.opensuse.org/show_bug.cgi?id=1135550
Не китайская, ни новая японская, а только русская и украинская.
К счастью, на аналогичный по сложности пач понадобился всего 1 день
+Index: openssl-1.1.1b/crypto/err/err.c
+===================================================================
+--- openssl-1.1.1b.orig/crypto/err/err.c 2019-02-26 15:15:30.000000000 +0100
++++ openssl-1.1.1b/crypto/err/err.c 2019-05-21 21:14:31.211536069 +0200
+@@ -185,7 +185,7 @@ static ERR_STRING_DATA *int_err_get_item
+
+ #ifndef OPENSSL_NO_ERR
+ /* A measurement on Linux 2018-11-21 showed about 3.5kib */
+-# define SPACE_SYS_STR_REASONS 4 * 1024
++# define SPACE_SYS_STR_REASONS 8 * 1024
+ # define NUM_SYS_STR_REASONS 127
+
+ static ERR_STRING_DATA SYS_str_reasons[NUM_SYS_STR_REASONS + 1];
+@@ -225,8 +225,8 @@ static void build_SYS_str_reasons(void)
+
+ str->string = cur;
+ cnt += l;
+- if (cnt > sizeof(strerror_pool))
+- cnt = sizeof(strerror_pool);
++ if (cnt >= sizeof(strerror_pool))
++ cnt = sizeof(strerror_pool) - 1;
+ cur += l;
+
+ /*