Kürzlich ist jemand mit einem interessanten Problem auf mich zugekommen.
Es wurde eine Zertifizierungsstelle installiert. Als Grundlage dient Linux, d.h. (vermutlich) OpenSSL. Die Sperrlisten funktionieren auf Linux-Clients, werden aber von Windows-Systemen nicht akzeptiert. Hier kommt immer folgende Fehlermeldung, wenn man die Sperrlisten überprüft.
0x80092013 (-2146885613 CRYPT_E_REVOCATION_OFFLINE) -- 2148081683 (-2146885613)
Text der Fehlermeldung: Die Sperrfunktion konnte die Sperrung nicht überprüfen, da der Sperrserver offline war.
Wie man sieht, wird das Testzertifikat über den Windows-Shelldialog einwandfrei akzeptiert.

Wir gehen der Sache jedoch auf den Grund und überprüfen die im Zertifikat enthaltenen Adressen für Zertifizierungsstellen-Zertifikat und zertifikatsperrlisten.
certutil -verify -urlfetch test.cer
Hier treffen wir den Fehlercode CRYPT_E_REVOCATION_OFFLINE an.
ERROR: Verifying leaf certificate revocation status returned The revocation function was unable to check revocation because the revocation server was offline. 0x80092013 (-2146885613 CRYPT_E_REVOCATION_OFFLINE)
CertUtil: The revocation function was unable to check revocation because the revocation server was offline.

Um einen tieferen Einblick zu erhalten, was im Hintergrund geschieht, aktivieren wir das Logging für die CryptoAPI (CAPI).
Hierzu gehen wir in die Ereignisanzeige unter "Applications and Services Logs" – "Microsoft" – "Windows" – "CAPI2".

Das CAPI2 Log ist in der Standardeinstellung deaktiviert, da es sehr viele Einträge protokolliert. Wir aktivieren es übergangsweise.

Nun reproduzieren wir den Fehler mit certutil und deaktivieren das Log anschließend wirder.

In CAPI2 Log finden wir nun Ereignisse der Kategorie "Reject Revocation Information".

Werfen wir einen Blick in die Details, sehen wir, dass die Sperrliste zwar heruntergeladen werden konnte, deren Prüfung allerdings offenbar nicht erfolgreich war.

Die Fehlermeldung lautet:
A certificate being used for a purpose other than the ones specified by its CA.
Diese besagt sinngemäß, dass die Zertifikatsperrliste von einer Zertifizierungsstelle ausgestellt wurde, die hierfür keine Berechtigung verfügt.
Werfen wir also einen Blick in das Zertifizierungsstellen-Zertifikat.

In der Key Usage Zertifikaterweiterung stellen wir fest, dass das Zertifizierungsstellen-Zertifikat nur über die Key Usage keyCertSign (0x4), jedoch nicht cRLSign (0x2) verfügt.
Die Zertifizierungsstelle ist somit überhaupt nicht berechtigt, Zertifikatsperrlisten auszustellen. Die CAPI erkennt dieses und verweigert entsprechend, die Sperrliste als gültig anzuerkennen.
Fazit
Der Beschreibungstest des Fehlercodes CRYPT_E_REVOCATION_OFFLINE sagt zwar aus, dass sie nicht heruntergeladen werden kann, in der Praxis kann dieser Fehlercode aber deutlich mehr bedeuten, zum Beispiel:
- Die Zertifikatsperrliste kann nicht heruntergeladen werden
- Die Zertifikatsperrliste ist noch nicht oder nicht mehr gültig
- Die Zertifikatsperrliste kann nicht verifiziert werden
Ebenso zeigt sich, dass die Microsoft Active Directory Certificate Services uns mit sinnvollen Standardeinstellungen vor vielen möglichen Stolpersteinen im PKI-Bereich schützt.