Ich bin vor kurzem von Apache 2.2.2 auf Nginx 1.8.0 umgestiegen und hab bei der Gelegenheit mal meine SSL Einstellungen auf den neusten Stand gebracht. Dabei bin ich auch über die Option „ssl_stapling“ gestolpert, die ab Nginx >= 1.3.7 möglich ist.
Beim Überprüfen der SSL-Einstellungen kann ich übrigens https://cipherli.st sehr empfehlen. Diese Einstellungen sind immer auf dem neusten Stand und können fast ohne Einschränkungen verwendet werden. Natürlich sollte man sich im Klaren sein, was man dort alles einstellt, aber das bekommt man mit Doku-Lesen ja schnell raus.
Was ist OCSP Stapling und warum sollte ich es aktivieren?
Das Online Certificate Status Protocol (OCSP) ist ein Netzwerkprotokoll, das es Clients ermöglicht, den Status von X.509-Zertifikaten bei einem Validierungsdienst abzufragen. Es dient also dazu, zu überprüfen, ob das Zertifikat noch gültig ist oder nicht.
Da kommt man schon zum ersten Grund für das aktivieren. Zitat Wikipedia: Die Verwendung von OCSP wirft Fragen hinsichtlich der Wahrung der Privatsphäre auf, weil es bedingt, dass der Client neben dem eigentlichen Kommunikationsziel eine dritte Partei kontaktiert, um die Gültigkeit des Zertifikats zu überprüfen. Eine Möglichkeit, dieses Problem zu lösen, liegt in der Verwendung von OCSP Stapling, dabei wird z.B. das Browserverhalten nicht enthüllt.
Aber natürlich wollen wir nicht nur aufgrund der Privatsphäre OCSP Stapling einsetzen sondern auch einzig und allein wegen der Geschwindigkeit der Website. Durch OCSP Stapling muss der Client, der auf meine Website zugreift, nicht zuerst bei der Zertifizierungsstelle anfragen.
Der Client erhält beim Besuch meiner Webseite also gleich beim SSL-Handshake die benötigte OCSP Response für das Zertifikat und mein Server kann gleich beweisen, dass alles passt. Dazu holt sich der Server in regelmäßigen Abständen die neusten OCSP Responses.
Durch OCSP Stapling erhält man also eine Win-Win-Situation für den Besucher und den Webseitenbetreiber. Der Besucher hat eine höhere Sicherheit seiner Privatsphäre und der Webseitenbetreiber hat eine schnellere Homepage.
Das richtige OCSP Zertifikats-Bundle besorgen
Bevor wir mit der Konfiguration von Nginx anfangen müssen wir uns erst mal das richtige Zertifikatsbundle von unserer CA holen. Ich nutze StartSSL.com und die Zertifikate erhält man unter: StartSSL Zertifikate. Man lädt am besten das Zertifikat-Bundle „ca-bundle.pem“ und speichert es am Ort seiner Wahl. Ich habe es unter
/etc/nginx/ssl/00basic-certificates/ca-ocsp-bundle.pem
gespeichert.
SSL-Einstellung bei Nginx ändern
Ich gehe jetzt davon aus, dass ihr mit den Grundzüngen von Nginx vertraut seid und bereits SSL auf dem Server aktiviert hat. Dann ist eigentlich nicht mehr viel nötig. Erweitert die SSL-Einstellungen um folgende Parameter:
ssl_stapling on; # Requires nginx >= 1.3.7
ssl_stapling_verify on; # Requires nginx => 1.3.7
ssl_trusted_certificate /etc/nginx/ssl/00basic-certificates/ca-ocsp-bundle.pem;
resolver 8.8.8.8 8.8.4.4 208.67.222.222 208.67.220.220 valid=300s;
resolver_timeout 5s;
Die ersten beiden Zeilen aktiveren SSL Stapling. mit der Einstellung ssl_trusted_certificate gebt ihr das zuvor gespeicherte SSL-Bundle für die Verifikation an. Anschließend werden einige Resolver genannt, und wie lange die Antwort dieser Resolver gültig ist. Die letzte Zeile gibt einen timeout für die Resolver-Anfrage an. Fertig ist die Einstellung. Nun nur noch Nginx neustarten und die Einstellungen sind aktiv.
Stolperfallen bei Nginx
Stolperfalle 1: Natürlich ist es wie immer nicht ganz so einfach. Solltet ihr mehrere Webseiten mit dem Nginx betreiben, müsst ihr die Einstellungen global bei allen Webseiten separat vornehmen. Ist bei einer Website SSL Stapling nicht aktiv, funktioniert es bei allen Webseiten nicht.
Stolperfalle 2: Wenn ihr dann überprüft, ob SSL Stapling sauber funktioniert, müsst ihr den Test immer 2x durchführen, da der erste OCSP-Request erst von der CA geholt werden muss um dann für den zweiten Test aktiv zu sein.
Verschiedene Tests ob SSL OCSP Stapling sauber funktioniert
Nun müssen wir natürlich erst mal testen ob das alles so geklappt hat. Dazu von einer Konsole deiner Wahl folgenden Befehl ausführen:
openssl s_client -connect www.timoschindler.de:443 -servername www.timoschindler.de
(Natürlich mit eurem eigenen Server ^^). Die Antwort sollte etwa so aussehen:
OCSP Response Data:
OCSP Response Status: successful (0x0)
Response Type: Basic OCSP Response
Version: 1 (0x0)
Responder Id: C = IL, O = StartCom Ltd. (Start Commercial Limited), CN = StartCom Class 2 Server OCSP Signer
Produced At: Jul 9 06:28:52 2015 GMT
Alternativ kann man auch den Test auf SSLlabs.com durchführen und folgenden Eintrag suchen:
Fertig ist der supertolle Nginx mit aktiven OCSP Stapling. Wie immer würde ich mich über Anregungen und Verbesserungsvorschläge freuen.