Здравствуйте, All!

nginx/1.19.6 из официального репозитория nginx.org
openssl-1.1.1g-12.el8_3.x86_64 из репозитория CentOS 8.3

Протокол TLSv1.3 включен, но если в сервере по умолчанию прописать
директиву "ssl_reject_handshake on;" тогда протокол TLSv1.3 перестает
работать для всех серверов.

Фрагмент конфигурации nginx на уровне http:

http {
    # ...
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers off;
ssl_ciphers ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384; ssl_conf_command Ciphersuites TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384;
    # ...
}

Комментирование директивы "ssl_conf_command Ciphersuites ... ;"
не помогает решить проблему - протокол TLSv1.3 по прежнему не работает.

Конфигурация сервера по-умолчанию:

# cat /etc/nginx/conf.d/default.conf

server {
    listen 111.111.111.111:443 bind default_server ssl http2;
    ssl_reject_handshake on;
    server_name default-server;
    location / {
        return 444;
    }
}

Конфигурация обычного сервера:

# cat /etc/nginx/conf.d/example.com.conf
server {
    listen 111.111.111.111:443 ssl http2;
    server_name example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key     /etc/letsencrypt/live/example.com/privkey.pem;
    add_header Strict-Transport-Security max-age=31536000 always;
    location / {
        return 200 "OK";
    }
}

Попытка подключения к серверу example.com по протоколу TLSv1.3 завершается ошибкой:

# openssl s_client -tls1_3 -connect example.com:443 -servername example.com
CONNECTED(00000003)
140542584969024:error:1409442E:SSL routines:ssl3_read_bytes:tlsv1 alert protocol version:ssl/record/rec_layer_s3.c:1543:SSL alert number 70
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 7 bytes and written 235 bytes
Verification: OK
---
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
Early data was not sent
Verify return code: 0 (ok)
---

Это ошибка в nginx или я что-то делаю не так?

Если в сервере по-умолчанию закомментировать директиву
"ssl_reject_handshake on;" и прописать какой-нибудь сертификат,

    #ssl_reject_handshake on;
ssl_certificate /etc/letsencrypt/live/example.net/fullchain.pem;
    ssl_certificate_key     /etc/letsencrypt/live/example.net/privkey.pem;

Тогда попытка подключения к серверу example.com по протоколу TLSv1.3 завершается успешно:

# openssl s_client -tls1_3 -connect example.com:443 -servername example.com

CONNECTED(00000003)
---
Certificate chain
 0 s:CN = example.com
   i:C = US, O = Let's Encrypt, CN = R3
 1 s:C = US, O = Let's Encrypt, CN = R3
   i:O = Digital Signature Trust Co., CN = DST Root CA X3
---
Server certificate
-----BEGIN CERTIFICATE-----
[...]

--
Best regards,
 Gena

_______________________________________________
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Ответить