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 das Zertifikat und die privaten Schlüsseldateien befinden. Danach habe ich den Server mit neu gestartet sudo service nginx restart
.
Wenn ich jetzt bin curl https://my_ip_address
, erhalte ich die folgende Nachricht:
curl: (35) gnutls_handshake() failed: Handshake failed
Ich habe die zwei Protokolldateien überprüft ich kenne, /var/log/nginx/access.log
und /var/log/nginx/error.log
; 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 ssl_ecdh_curve secp384r1;
Leitung 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
sudo nginx -t
die relevanten Teile der Konfiguration in Ihrer Frage veröffentlichen, um weitere Hilfe zu erhalten./var/log/syslog
da Sie möglicherweise andere Probleme identifizieren, die jedoch nicht unbedingt mit diesem zusammenhängen.warn
und ich habe es geändertalert
, aber immer noch nichts. Könnte der Fehler in openssl auftreten, bevor die Anforderung nginx erreicht?syslog
, außer ein paar UFW-Blöcken, die nichts miteinander zu tun zu haben scheinendebug
wäre am ausführlichsten. Damit ich erraten kann, was los ist, müsste ich die relevanten Teile der Konfiguration sehen. Andere können vielleicht ohne diagnostizieren, aber ich bin nicht ganz so erfahren.Antworten:
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 sie lautet nun wie folgt:Und jetzt, da die Protokollstufe höher ist, werden SSL-Handshake-Fehler protokolliert:
quelle
[info]
Überschrift zeigt, wäre eine Protokollinformationsebene ausreichend und viel lauter als das Debuggen.[debug]
und nicht protokolliert wird[info]
. Für einige ist es daher möglicherweise besser, mit der ausführlichsten Protokollierung zu beginnen.Eigentlich haben Sie die Option ssl_ecdh_curve verwendet , um den 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:
Verwenden Sie die Diffie Hellman-Konfiguration für Dateien und höher in Nginx:
quelle
ssl_dhparam
in der Konfigurationsdatei, aber irgendwie landete sie nicht in dem Code, den ich gepostet habe.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 ist in meinem Fall nicht zu erwarten, dass der Standardwert für nginx-ingress-controller geringer ist als die Standardkonfiguration, und das Nginx-Debug-Protokoll wird angezeigt Fehler ist: keine gemeinsame Chiffre. Wenn ich einige Chiffren in die Konfigurationsdatei einfüge und nginx neu lade, wurde das Promeble verschoben. Und Sie können auf diese Konfigurationsvorlage verweisen: https://mozilla.github.io/server-side-tls/ssl-config-generator/
quelle