
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:443
es hat gut funktioniert. Hier meine ssl.conf
nginx-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.2
Anweisung aus meinem entferne ssl.conf
und nur stehen lasse TLSv1.3
, wird die Verbindung immer noch über TLS 1.2 hergestellt.
Es gibt nirgendwo sonst eine ssl_protocols
solche 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_protocols
und die ssl_ecdh_curve
Direktive zu reagieren. Wenn ich beispielsweise die ssl_ciphers
aus 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 ) secp256r1
nicht 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_curve
prime256v1
ssl.conf
grep -R 'ssl_protocol' /etc/*
ssl.conf
ssl_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 http
Block 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 server
kopiere (sonst gibt esssl.conf
http
nginx.conf
nginx -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 http
Block nginx.conf
jetzt 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/*;
}
http
Ich 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!