it-swarm.com.de

Wie kann ich einen Nginx SSL-Handshake-Fehler beheben?

Ich versuche, HTTPS für nginx unter Ubuntu 16.04 zu konfigurieren. Ich habe es bereits mit listen 443 ssl - Anweisungen eingerichtet und ihm mitgeteilt, wo sich die Zertifikats- und privaten Schlüsseldateien befinden. Danach habe ich den Server mit Sudo service nginx restart Neu gestartet.

Wenn ich jetzt curl https://my_ip_address Erhalte, erhalte ich die folgende Meldung:

curl: (35) gnutls_handshake() failed: Handshake failed

Ich habe die beiden mir bekannten Protokolldateien /var/log/nginx/access.log Und /var/log/nginx/error.log Überprüft. Es wird jedoch keine Spur von der Anfrage angezeigt.

Meine Frage: Wird etwas protokolliert, wenn der SSL-Handshake fehlschlägt? Wenn ja wo? Wie kann ich im Allgemeinen solche Probleme beheben, bei denen ein Fehler im SSL-Protokoll vorliegt, bevor die HTTP-Anforderung an den Server gesendet oder vom Server extrahiert wird?

EDIT: Ich habe es zum Laufen gebracht, indem ich die folgenden Zeilen aus meiner Konfiguration entfernt habe:

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";
ssl_ecdh_curve secp384r1;
ssl_session_cache shared:SSL:10m;
ssl_session_tickets off;
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;

Update: Die Zeile ssl_ecdh_curve secp384r1; Schien das Problem zu verursachen. Ohne das funktioniert alles gut, aber damit schlägt der SSL-Handshake fehl. Seltsamerweise lautet die Fehlermeldung, dass "keine gemeinsame Chiffre" vorhanden ist. Ich bin mir nicht sicher, was es tut, also habe ich es einfach entfernt. Ich habe auch das ssl_stapling-Zeug entfernt, weil ich nicht weiß, wofür es ist, und es hat seine eigenen Fehlermeldungen erstellt

7
Michael Hewson

Wie @Paul sagte, bestand die Lösung darin, die Protokollstufe zu erhöhen. Ich habe eine Zeile in meiner nginx.conf - Datei geändert und lautet nun wie folgt:

error_log  /var/log/nginx/error.log debug;

Und jetzt, da die Protokollstufe höher ist, werden SSL-Handshake-Fehler protokolliert:

2016/09/19 22:38:08 [info] 10114#10114: *2 SSL_do_handshake() failed (SSL: error:1408A0C1:SSL routines:ssl3_get_client_hello:no shared cipher) while SSL handshaking, client: 108.162.242.24, server: 0.0.0.0:443
7
Michael Hewson

Eigentlich haben Sie die Option ssl_ecdh_curve verwendet, um Diffie Hellman-Schlüsselaustausch in Nginx zu konfigurieren, aber Sie haben keine Parameterdatei angegeben. Daher müssen Sie die Option ssl_dhparam verwenden und eine Datei mit openssl erstellen.

Erstelle Datei:

openssl dhparam -out /etc/ssl/certs/dhparam.pem 4096

Verwenden Sie die Diffie Hellman-Konfiguration für Dateien und höher in Nginx:

ssl_dhparam                     /etc/ssl/certs/dhparam.pem;
ssl_ecdh_curve                  secp384r1;
4
Jens Bradler

Sie können die Konfiguration Ihres Nginx-Servers überprüfen. Es gibt eine Konfigurationszeile: ssl_ciphers, der Standardwert ist: ssl_ciphers HIGH :! ANULL :! MD5; ( http://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_ciphers ), aber manchmal wird in meinem Fall nicht erwartet, dass der Standardwert für nginx-ingress-controller geringer ist als die Standardkonfiguration und der Fehler beim Anzeigen des Nginx-Debug-Protokolls lautet: Keine gemeinsam genutzte Verschlüsselung. Wenn ich einige Chiffren in die Konfigurationsdatei einfüge und nginx neu lade, wurde das Promeble entfernt. Und Sie können auf diese Konfigurationsvorlage verweisen: https://mozilla.github.io/server-side-tls/ssl-config-generator /

0
user8292879