2010-12-08 3 views
8

Das Nachschlagewerk, das ich arbeite von (Network Security mit OpenSSL, von Viega, Messier und Chandra), auf Seite 133, heißt es:Behandelt OpenSSL jetzt automatisch CRLs (Certificate Revocation Lists)?

[...] muss eine Anwendung CRL laden Dateien, damit der interne Verifizierungsprozess sicherstellt, dass jedes verifizierte Zertifikat nicht widerrufen wird. Leider ist die CRL-Funktionalität von OpenSSL in Version 0.9.6 nicht vollständig. Die für die Verwendung von CRL-Informationen erforderlichen Funktionen sind in neuen Versionen ab 0.9.7 vollständig. [...]

Ich kann keine brauchbaren Informationen darüber in der OpenSSL-Dokumentation finden (keine Überraschung). Es scheint mir, dass die Überprüfung der CRLs ein automatischer Teil des OpenSSL-Verifizierungsprozesses sein sollte. Werden CRLs jetzt automatisch verarbeitet, oder muss ich noch den gesamten im Buch aufgelisteten Müll durchgehen, um mühsam zu überprüfen, dass ein Zertifikat nicht widerrufen wurde?

Eine eng verwandte Frage: lädt die SSL_CTX_set_default_verify_paths Funktion CRL Pfade auch?

Antwort

6

SSL_CTX_set_default_verify_paths() lädt nur CA-Pfade, nicht CRLs.

Ich glaube, (obwohl ich noch nicht wirklich es selbst implementiert), dass der richtige Prozess ist:

/* Load CRLs into the `X509_STORE` */ 

X509_STORE *x509_store = SSL_CTX_get_cert_store(ctx); 
X509_STORE_add_crl(x509_store, crl); 

/* Enable CRL checking */ 
X509_VERIFY_PARAM *param = X509_VERIFY_PARAM_new(); 
X509_VERIFY_PARAM_set_flags(param, X509_V_FLAG_CRL_CHECK); 
SSL_CTX_set1_param(ctx, param); 
X509_VERIFY_PARAM_free(param); 
+0

Danke, ich weiß es zu schätzen. –

5

Die akzeptierte Antwort funktioniert nicht ganz in libssl v0.9.8o. Obwohl der Code übereinstimmt, dass am unteren Rand der Seite in der Online-Dokumentation zum 2011/06/23:

http://www.openssl.org/docs/crypto/X509_VERIFY_PARAM_set_flags.html

ich diesen Code verwendet:

X509_STORE *store = getStore(); 

// Enable CRL checking 
X509_VERIFY_PARAM *param = X509_VERIFY_PARAM_new(); 
X509_VERIFY_PARAM_set_flags(param, X509_V_FLAG_CRL_CHECK); 
X509_STORE_set1_param(store, param); 
X509_VERIFY_PARAM_free(param); 

Beachten Sie die Verwendung von X509_STORE eher als SSL_CTX, um den Parameter festzulegen.

EDIT: Eine weitere Sache zu beachten mit OpenSSL und CRLs. Wenn Sie eine CRL für einen Kontext aktivieren, wird jedes Zertifikat abgelehnt, für das die Zertifizierungsstelle keine CRL besitzt. Soweit ich weiß, gibt es keine Möglichkeit, OpenSSL dazu zu bringen, CRLs nur auf Zertifikate von CAs anzuwenden, die in den CRLs aufgelistet sind, die es hat.

Ich lief auf dieses Problem ein und verschwendete viel Zeit damit herauszufinden, warum mein Zertifikat nicht akzeptiert wurde, als es absolut gültig war. Das Problem war, dass ich eine CRL für eine Zertifizierungsstelle, aber nicht für eine andere hinzugefügt hatte. Alle Zertifikate von der CA, die keine CRL hatten, wurden zurückgewiesen. OpenSSL ist alles oder nichts in dieser Hinsicht.