Ich habe ein NGINX, das als Reverse-Proxy für unsere Sites fungiert, und es funktioniert sehr gut. Die Sites, die Notwendigkeit ssl folgte ich raymii.org sicher zu machen , wie stark haben eines SSLLabs wie möglich punkten. Einer der Standorte muss PCI-DSS-kompatibel sein, aber basierend auf dem neuesten TrustWave-Scan schlägt dieser jetzt fehl, da TLS 1.0 aktiviert ist.
Auf der http-Ebene in nginx.conf habe ich:
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
Für den spezifischen Server habe ich:
ssl_protocols TLSv1.1 TLSv1.2;
Ich habe Chiffren geändert, Dinge von der http-Ebene auf jeden SSL-Standortserver verschoben, aber egal, was passiert, wenn ich ausgeführt werde:
openssl s_client -connect www.example.com:443 -tls1
Ich erhalte eine gültige Verbindung für TLS 1.0. SSLLabs setzt das Nginx-Setup für die Site als A, aber mit TLS 1.0. Ich glaube, dass der Rest meines Setups korrekt ist und TLS 1.0 nicht deaktiviert.
Gedanken darüber, was ich vermissen könnte?
openssl version -a
OpenSSL 1.0.1f 6 Jan 2014
built on: Thu Jun 11 15:28:12 UTC 2015
platform: debian-amd64
nginx -v
nginx version: nginx/1.8.0
Antworten:
Das Problem hierbei ist, dass der
Server name indication
Teil der TLS-Aushandlung erfolgt, nachdem die Verbindung selbst ausgehandelt wurde. Das Protokoll wird während der Verbindungsaushandlung ausgehandelt.Möglicherweise kann für diesen virtuellen Host kein TLS v1.0 erzwungen werden, wenn Sie diesen virtuellen Host für eine IP-Adresse auf dem Server konfigurieren, dem keine anderen virtuellen Hosts zugeordnet sind. Daher würde nginx anhand der IP-Adresse wissen, dass kein TLS v 1.0 erlaubt ist.
quelle
Server Name Indication
ist Teil des TLSClientHello
. Sie ist in der ersten vom Client gesendeten Nachricht enthalten und wird später nicht ausgehandelt. Es klingt eher so, als hätte Nginx einen Designfehler. Es hört sich so an, als würde es die Verbindung akzeptieren und dann an den virtuellen Host weiterleiten, ob es richtig oder falsch ist. Stattdessen sollte nginx den Servernamen analysieren, den virtuellen Host konsultieren und die Verbindung dann ablehnen, wenn die Anforderungen des virtuellen Hosts nicht erfüllt werden. Der Konstruktionsfehler ist wahrscheinlich CVE-gerecht, da TLS 1.0 zuweilen fraglich ist. Es ist eindeutig eine C & A-Verletzung unter bestimmten Umständen.Suchen Sie einen Serverblock, den Sie als "Standard" -ssl-Aushandlungsvorlage verwenden möchten. Finden Sie Ihre Hörlinie
und
default_server
am Ende der Zeile hinzufügenAuf diese Weise kann Nginx bei der Aushandlung der zu verwendenden TLS-Version eine Konfiguration vornehmen. Der Nachteil ist, dass Sie nur einen Standardserver pro Port haben können. Es ist also kein Problem, einige virtuelle Domänen mit aktiviertem TLSv1 und andere mit deaktiviertem TLSv1 zu haben.
quelle
Ich habe TLSv1 auf Nginx Version 1.8.1 deaktiviert. Sie müssen openssl auf die Versionen 1.0.1g oder 1.0.1h aktualisieren. Dann entfernen Sie einfach 'TLSv1' aus der ssl_protocols-Direktive:
Überprüfen Sie dann die Verbindung über TLSv1 mit dem Befehl:
Sie sollten so etwas bekommen:
quelle