In einem aktuellen Projekt nutzen wir eine eigene kleine CA auf Basis von OpenSSL, um Zertifikate für Entwicklungs- und Testumgebungen auszustellen.
Zertifikate sollen jetzt per CRL und OCSP validiert werden. CRLs lassen sich mit dem Kommando
openssl ca -gencrl ...
generieren und dann an die Clients verteilen.
OCSP ist ein aktives Protokoll und benötigt dafür einen Server und einen passenden Client. In der Regel nutzen OCSP-Server das HTTP-Protokoll für den Transport der OCSP-Anfragen und -Antworten.
In einer Java-Anwendung kann man für den Client z.B. die dafür gedachten Klassen aus BouncyCastle verwenden.
Einen Server und Client auf Kommandozeilenebene bringt OpenSSL in Form des ocsp-Unterkommandos mit. Der Server nutzt die index.txt der OpenSSL CA und kann folgendermaßen gestartet werden:
openssl ocsp -index index.txt -CA ca.cert.pem -rsigner ca.cert.pem -rkey private/ca.key.pem -port 8080 -nmin 10
In diesem Fall wird für den OCSP-Responder und die CA das gleiche Zertifikat verwendet, bei einer echten CA würde man ein dediziertes Zertifikat/Schlüssel-Paar für den OCSP-Responder erzeugen. Der obige Aufruf startet einen OCSP/HTTP-Responder auf Port 8080 und schaut aller 10 Minuten in der index.txt, ob sich etwas am Widerrufsstatus der von der CA unterschriebenen Zertifikate geändert hat.
Testen kann man den Responder z.B. mit folgendem Aufruf:
openssl ocsp -issuer ca.cert.pem -cert cert_to_test.crt -url http://cahost:8080/ -resp_text