TLS 1.3 funktioniert nicht auf Nginx 1.21 mit OpenSSL 1.1.1n

TLS 1.3 funktioniert nicht auf Nginx 1.21 mit OpenSSL 1.1.1n

Ich habe nginx (1.21.6) mit openssl 1.1.1n auf einem Debian 11-Server laufen. Obwohl ich viele Tutorials durchgearbeitet und mir in diesem Forum viele Fragen zu diesem Thema angesehen habe, bekomme ich TLS 1.3 nicht zum Laufen. Die Ausgabe von nginx -V:

nginx version: nginx/1.21.6
built by gcc 10.2.1 20210110 (Debian 10.2.1-6)
built with OpenSSL 1.1.1k  25 Mar 2021 (running with OpenSSL 1.1.1n  15 Mar 2022)
TLS SNI support enable

Ich habe nginx auf die Hauptversion aktualisiert, weil ich TLS 1.3 auch in früheren Versionen nicht zum Laufen bringen konnte. Das ist sehr seltsam ... Openssl unterstützt definitiv TLS 1.3. Ich habe es getestet, und openssl s_client -tls1_3 -connect www.cloudflare.com:443es hat gut funktioniert. Hier meine ssl.confnginx-Datei, die ich in jeden meiner nginx-Server aufgenommen habe (Zertifikate sind separat in den Serverabschnitten enthalten):

ssl_session_timeout 1d;
ssl_session_cache shared:SSL:10m;  # about 40000 sessions
ssl_session_tickets off;

ssl_stapling on;
#ssl_trusted_certificate /pfad/bundle.ca.pem;
ssl_stapling_verify on;

ssl_dhparam /etc/nginx/dhparams.pem;

ssl_ecdh_curve X448:secp521r1:secp384r1;


ssl_protocols TLSv1.3 TLSv1.2;
ssl_ciphers TLS13-CHACHA20-POLY1305-SHA256:TLS13-AES-256-GCM-SHA384:TLS13-AES-128-GCM-SHA256:TLS-CHACHA20-POLY1305-SHA256:TLS-AES-256-GCM-SHA384:TLS-AES-128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers on;

# HSTS (ngx_http_headers_module is required) (63072000 seconds)
add_header Strict-Transport-Security "max-age=31536000;preload;includeSubDomains" always;

DerQualys SSL-Test meiner Websiteszeigt jedoch nicht an, dass ich TLS 1.3 auf meinem Server verwende. Außerdem zeigt der Chrome-Browser an, dass die Verbindung über TLS 1.2 hergestellt wird. Selbst wenn ich die TLSv1.2Anweisung aus meinem entferne ssl.confund nur stehen lasse TLSv1.3, wird die Verbindung immer noch über TLS 1.2 hergestellt.

Es gibt nirgendwo sonst eine ssl_protocolssolche Direktive in einer anderen Konfigurationsdatei von nginx. Ich habe das über überprüft nginx -T.

Mir gehen wirklich die Ideen aus..... Kann mir jemand helfen?

BEARBEITEN: Irgendwie scheint nginx nicht richtig auf die ssl_protocolsund die ssl_ecdh_curveDirektive zu reagieren. Wenn ich beispielsweise die ssl_ciphersaus meiner Konfiguration lösche (wie @drookie in seinem Kommentar vorgeschlagen hat), scheinen TLS 1.0 und TLS 1.1 von meinem Server unterstützt zu werden, obwohl ich eingestellt habe ssl_protocols TLSv1.3 TLSv1.2;. Ähnlich verhält es sich lautQualys SSL-Test, wird unterstützt, obwohl ich diese Kurve in meiner Konfiguration von (noch ) secp256r1nicht habe . Es scheint mir, als ob irgendetwas meine Einstellungen in der Datei überschreibt. Ich verwende acme.sh, um meine Zertifikate abzurufen. gibt nur die Zeile mit aus . Ich habe keine Ahnung, was die Störung/Überschreibung verursachen könnte...ssl_ecdh_curveprime256v1ssl.confgrep -R 'ssl_protocol' /etc/*ssl.confssl_protocols TLSv1.3 TLSv1.2;

Antwort1

Nach vielen weiteren Tests und viel Lesen habe ich endlich eine Lösung gefunden. Ich musste die SSL-Konfiguration in den httpBlock schreiben, nicht in die Blöcke meiner Nginx-Konfiguration. Dies funktionierte jedoch nur, wenn ich die Anweisungen aus meiner Datei explizit in den Block in meiner serverkopiere (sonst gibt esssl.confhttpnginx.confnginx -t

nginx: [emerg] invalid number of arguments in "include" directive in /etc/nginx/nginx.conf:33
nginx: configuration file /etc/nginx/nginx.conf test failed

aus irgendeinem Grund).

Daher sieht mein httpBlock nginx.confjetzt wie folgt aus:

http {

  ...
 
    ssl_dhparam /etc/nginx/dhparams.pem;
    
    ssl_ecdh_curve X448:secp521r1:secp384r1;
    
    ssl_protocols TLSv1.3 TLSv1.2;
   ssl_ciphers 'TLS-CHACHA20-POLY1305-SHA256:TLS-AES-256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256';

   ...

    # Virtual Host Configs
    ##

    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
}

httpIch weiß nicht, warum diese SSL-Einstellungen in den Block und nicht in jeden Block eingefügt werden müssen server..... Aber es funktioniert und TLS 1.3 ist aktiviert!

verwandte Informationen