2010-12-08 8 views
8

Le livre de référence que je travaille à partir (Network Security avec OpenSSL, par Viega, Messier et Chandra), à la page 133, déclare:OpenSSL gère-t-il automatiquement les listes CRL (Certificate Revocation Lists)?

[...] une application doit charger CRL fichiers afin que le processus de vérification interne vérifie que chaque certificat qu'il vérifie n'est pas révoqué. Malheureusement, la fonctionnalité CRL d'OpenSSL est incomplète dans la version 0.9.6. Les fonctionnalités nécessaires pour utiliser les informations CRL seront complètes dans les nouvelles versions commençant par 0.9.7. [...]

Je ne trouve aucune information utilisable à ce sujet dans la documentation OpenSSL (pas de surprise ici). Il me semble que la vérification des LCR devrait faire automatiquement partie du processus de vérification d'OpenSSL. Est-ce que les listes de révocation de certificats sont traitées automatiquement maintenant, ou dois-je passer en revue toutes les ordures répertoriées dans le livre pour vérifier laborieusement qu'un certificat n'a pas été révoqué?

Une question étroitement liée: la fonction SSL_CTX_set_default_verify_paths charge-t-elle également les chemins CRL?

Répondre

6

SSL_CTX_set_default_verify_paths() charge uniquement les chemins d'accès CA et non les listes CRL.

je crois (bien que je ne me suis pas encore effectivement mis en œuvre) que le processus est correct:

/* 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

Merci, je l'apprécie. –

5

La réponse acceptée ne fonctionne pas tout à fait dans libssl v0.9.8o. Bien que le code correspond à celui au bas de la page dans la documentation en ligne au 2011/06/23:

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

J'ai utilisé ce code:

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); 

Notez l'utilisation de X509_STORE plutôt que SSL_CTX pour définir le paramètre.

EDIT: Encore une chose à noter avec OpenSSL et les CRL. Si vous activez une liste de révocation de certificats sur un contexte, tout certificat dont l'autorité de certification n'a pas de liste de révocation de certificats sera rejeté. Pour autant que je sache, OpenSSL ne peut en aucun cas appliquer les listes de révocation de certificats aux certificats provenant des autorités de certification répertoriées dans les listes de révocation de certificats. Je me suis heurté à ce problème et j'ai perdu beaucoup de temps à essayer de comprendre pourquoi mon certificat n'était pas accepté quand il était parfaitement valide. Le problème était que j'avais ajouté une CRL pour une CA mais pas pour une autre. Tous les certificats de l'AC qui n'avaient pas de LCR étaient rejetés. OpenSSL est tout ou rien à cet égard.