2010-12-08 14 views
8

El libro de referencia que estoy trabajando a partir de (seguridad de la red con OpenSSL, por Viega, Messier, y Chandra), en la página 133, dice:¿OpenSSL maneja automáticamente CRL (listas de revocación de certificados) ahora?

[...] una aplicación debe cargar CRL archivos para que el proceso de verificación interna asegure que cada certificado que verifica no se revoque. Desafortunadamente, la funcionalidad CRL de OpenSSL está incompleta en la versión 0.9.6. Las características necesarias para utilizar la información de CRL se completarán en nuevas versiones a partir de 0.9.7. [...]

No encuentro ninguna información utilizable en la documentación de OpenSSL (no me sorprende). Me parece que el control de las CRL debe ser una parte automática del proceso de verificación de OpenSSL. ¿Las CRL se manejan automáticamente ahora, o debo revisar toda la basura listada en el libro para verificar laboriosamente que un certificado no ha sido revocado?

Una pregunta estrechamente relacionada: ¿la función SSL_CTX_set_default_verify_paths carga rutas CRL también?

Respuesta

6

SSL_CTX_set_default_verify_paths() solo carga rutas de CA, no CRL.

creo (aunque todavía no he hecho implementó yo mismo) que el proceso correcto es:

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

Gracias, lo agradezco. –

5

La respuesta aceptada no acaba de funcionar en v0.9.8o libssl. Aunque el código coincide con que en la parte inferior de la página en los documentos en línea a partir del 2011/06/23:

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

que utiliza este código:

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

Aviso el uso de X509_STORE vez que SSL_CTX para establecer el parámetro.

EDIT: Una cosa más a tener en cuenta con OpenSSL y CRL. Si habilita una CRL en un contexto, se rechazará cualquier certificado cuya CA no tenga una CRL. No hay forma, hasta donde sé, de que OpenSSL aplique solo CRL a los certificados de las CA que figuran en las CRL que tiene.

Me encontré con este problema y perdí mucho tiempo tratando de descubrir por qué mi certificado no se aceptaba cuando era perfectamente válido. El problema era que había agregado una CRL para una CA pero no para otra. Todos los certificados de la CA que no tenían CRL fueron rechazados. OpenSSL es todo o nada a este respecto.

Cuestiones relacionadas