OCSP Stapling mit Nginx

Mein neuer Lieblings-Webserver Nginx beherrscht ab der Version 1.3.7 zur Geschwindigkeitsoptimierung von HTTPS OCSP Stapling. OCSP Stapling grob erklärt:

Der Browser prüft beim Aufruf von durch SSL/TLS gesicherte Seiten, ob die verwendeten Zertifikate noch gültig sind, also beispielsweise nicht zurückgezogen wurden. Dazu greifen Browser auf die von den Zertifikatherausgebern (Certificate Authorities, CA) bereitgestellten Certificate Revocation Lists (CRL) zu. Dementsprechend erfordert die Prüfung zusätzliche HTTP-Requests und zur Verarbeitung der Liste Rechenleistung des Client-Rechners. CLRs werden je nach CA alle paar Stunden aktualisiert.

Das Online Certificate Status Protocol (OCSP) optimiert dieses System durch eine Verringerung des zur Prüfung notwendigen Datenvolumen und nahezu Echtzeit-Ergebnissen. Nichtsdestotrotz müssen zusätzlichen HTTP-Requests durch den Browser verarbeitet werden, was dementsprechend zu einer höheren Latenz führt. Auch Ausfälle der CA-Server bzw. DoS-Attacken auf ebendiese sind nicht auszuschließen – der Browser kann dann das Zertifikat nicht verifizieren.

OCSP Stapling kann diese Probleme ein stückweit abfedern, indem der Server selbst die OCSP-Anfrage beim CA-Server vornimmt, für eine gewisse Zeit (und für alle Clients) im Zwischenspeicher vorhält und eine signierte Antwort an die Browser zurück gibt.

Konfiguration von OCSP Stapling mit Nginx

Um OCSP Stapling in Nginx zu aktivieren, muss im http– oder server-Kontext – abgesehen von der SSL-Konfiguration – folgende Option aktiviert werden:

ssl_stapling on;

Das alleine wollte aber nicht ausreichen, der Start von Nginx brach mit folgender Fehlermeldung ab:

nginx: [warn] "ssl_stapling" ignored, issuer certificate not found

Erst nachdem ein ssl_stapling_file angeboten wurde, startete Nginx wie erwartet.

OCSP Stapling File erstellen

Leider wird in der Nginx-Dokumentation nicht beschrieben, wie diese Datei zu erstellen ist. Ich habe dann nach etwas googlen eine Anleitung gefunden, mit der ich die Datei nach einigem Herumwerkeln erstellen konnte – auf Anhieb hat es damit auch nicht funktioniert, unter Anderem da das Zertifikat des Servers die gesamte Zertifikatkette beinhalten muss. Später habe ich aber noch einen Blogpost „Priming the OCSP cache in Nginx“ gefunden, der mittels eines kurzen Skripts für mich deutlich besser funktioniert. Daraus ein Gist gebastelt sieht das folgendermaßen aus:

#!/bin/sh
ISSUER_CER=$1
SERVER_CER=$2

URL=$(openssl x509 -in $SERVER_CER -text | grep "OCSP - URI:" | cut -d: -f2,3)

openssl ocsp -noverify -no_nonce -respout ocsp.resp -issuer $ISSUER_CER -cert $SERVER_CER -url $URL

Als erster Parameter wird demzufolge das Zertifikat des Ausstellers und als zweiter Parameter das Server-Zertifikat erwartet. Das Stapling-File bekommt den Namen ocsp.resp und kann anschließend für Nginx abgelegt werden. Die Konfiguration für Nginx sieht anschließend beispielsweise folgendermaßen aus:

ssl_stapling on;
ssl_stapling_file /etc/nginx/ocsp.resp;

2 Antworten auf „OCSP Stapling mit Nginx“

  1. Hi,

    ich habe es mal versucht nach zu machen. Bei mir kommt immer ne Fehlermeldung
    SSL_CTX_load_verify_locations(„/etc/nginx/ssl/ocsp.resp“) failed (SSL:)

    Hat vielleicht jemand eine Idee?

    lg
    Rolf

  2. Nice! Funktioniert bei mir aber nut mit dem openssl Befehl:
    openssl ocsp -noverify -no_nonce -respout ocsp.resp -issuer $ISSUER_CER -cert $SERVER_CER -url $URL -header „HOST“ „ocsp.startssl.com“

    Die OSCP response ist etwa eine Woche lang gültig. Wie kann ich dafür sorgen, dass rechtzeitig eine neue erstellt und von nginx gecachet wird?

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert