[crit] SSL_read_early_data() failed
Sergey Kandaurov
pluknet на nginx.com
Сб Фев 22 15:12:09 UTC 2020
> On 21 Feb 2020, at 22:19, mikhal123 <nginx-forum на forum.nginx.org> wrote:
>
> Включил на своём сервере опцию "ssl_early_data". Всё вроде бы хорошо, но в
> error.log довольно много (порядка 0.5% от общего числа запросов, что на
> трафике в миллион уже немного напрягает) записей вида:
> [crit] 11016#11016: *46796 SSL_read_early_data() failed (SSL:
> error:1423D06E:SSL routines:tls_parse_ctos_server_name:bad extension) while
> SSL handshaking, client: <ip_адрес_клиента>, server: 0.0.0.0:443
>
Было бы интересно посмотреть, что конкретно там прилетает.
> В связи с этим хотелось бы узнать:
> 1. Правильно ли я понимаю, что это проблемы со стороны клиентов (слишком
> старые клиенты?), и на сервере невозможно что-либо поделать для исправления
> этой ситуации?
Верно. Так происходит, например, если получен испорченный SNI:
плохой тип и/или длина значения, нулевые байты в значении, плохой формат.
> 2. Если так, то с какой целью данное извещение выводится с таким высоким
> уровнем приоритета (crit)
Так происходит по умолчанию, чтобы не пропустить ничего важного.
> 3. Можно ли как-то отключить вывод данного извещения (например, понизив его
> приоритет до warn) в логи для приведения их в прежний благопристойный вид?
>
Можно попробовать патч, понижающий уровень:
# HG changeset patch
# User Sergey Kandaurov <pluknet на nginx.com>
# Date 1582383432 -10800
# Sat Feb 22 17:57:12 2020 +0300
# Node ID ffb1eaf3bd88886233d941e531d68785671ae457
# Parent 72b792bb3885727bf381d4c4e66cfaf754ac7a59
SSL: logging level of "bad extension".
The "bad extension" errors are reported by OpenSSL 1.1.1
if an invalid servername extension value is received.
diff --git a/src/event/ngx_event_openssl.c b/src/event/ngx_event_openssl.c
--- a/src/event/ngx_event_openssl.c
+++ b/src/event/ngx_event_openssl.c
@@ -2896,6 +2896,9 @@ ngx_ssl_connection_error(ngx_connection_
#ifdef SSL_R_NO_SUITABLE_KEY_SHARE
|| n == SSL_R_NO_SUITABLE_KEY_SHARE /* 101 */
#endif
+#ifdef SSL_R_BAD_EXTENSION
+ || n == SSL_R_BAD_EXTENSION /* 110 */
+#endif
#ifdef SSL_R_NO_SUITABLE_SIGNATURE_ALGORITHM
|| n == SSL_R_NO_SUITABLE_SIGNATURE_ALGORITHM /* 118 */
#endif
Или конкретно для SNI:
diff --git a/src/event/ngx_event_openssl.c b/src/event/ngx_event_openssl.c
--- a/src/event/ngx_event_openssl.c
+++ b/src/event/ngx_event_openssl.c
@@ -2896,6 +2896,11 @@ ngx_ssl_connection_error(ngx_connection_
#ifdef SSL_R_NO_SUITABLE_KEY_SHARE
|| n == SSL_R_NO_SUITABLE_KEY_SHARE /* 101 */
#endif
+#ifdef SSL_R_BAD_EXTENSION
+ || (n == SSL_R_BAD_EXTENSION /* 100 */
+ && ERR_GET_FUNC(ERR_peek_error())
+ == SSL_F_TLS_PARSE_CTOS_SERVER_NAME)
+#endif
#ifdef SSL_R_NO_SUITABLE_SIGNATURE_ALGORITHM
|| n == SSL_R_NO_SUITABLE_SIGNATURE_ALGORITHM /* 118 */
#endif
--
Sergey Kandaurov
Подробная информация о списке рассылки nginx-ru