¿Cómo puedo verificar un certificado X509 en python que incluya una verificación de CRL?
openssl m2crypto (3)
Estoy intentando verificar un certificado X509 usando Python. En particular, necesito verificar las CRL cuando lo hago.
Ahora puede usar m2crypto para hacer esto, pero no puedo encontrar una opción que corresponda a -crl_check o -crl_check_all de openssl.
Alternativamente, podría usar un conducto y llamar a openssl directamente:
p1 = Popen(["openssl", "verify", "-CApath", capath, "-crl_check_all"],
stdin = PIPE, stdout = PIPE, stderr = PIPE)
message, error = p1.communicate(certificate)
exit_code = p1.returncode
Sin embargo, parece que openssl verify siempre devuelve un código de salida 0, por lo que tendría que comparar cadenas de alguna manera para saber si la verificación es exitosa, lo que prefiero no hacer.
¿Me estoy perdiendo algo simple aquí?
Gracias.
Al mirar el código fuente de la verificación de opens.l, de hecho devuelve 0 todo el tiempo, y no hay forma de cambiar eso. Sin embargo, no necesita llamar a openssl en la línea de comando: hay enlaces de python para la biblioteca.
OK, bien lo que he hecho es esto:
p1 = Popen(["openssl", "verify", "-CApath", capath, "-crl_check_all"],
stdin = PIPE, stdout = PIPE, stderr = PIPE)
message, error = p1.communicate(certificate)
verified = ("OK" in message and not "error" in message)
No es lo que hubiera elegido. Ha superado mis pruebas, pero no estoy seguro de que siempre funcione. No sé C lo suficientemente bien como para leer el código fuente de openssl y verificarlo.
Si alguien puede encontrar una situación donde esto podría fallar, por favor coméntelo.
Envié un parche a M2Crypto que permite la verificación del certificado X509 contra una cadena de CA así como también múltiples CRL.
https://bugzilla.osafoundation.org/show_bug.cgi?id=12954#c2
Consulte esta publicación para obtener más información: ¿Cómo uso m2crypto para validar una cadena de certificados X509 en una configuración que no sea SSL?