De los comentarios a mi primera respuesta veo que hay un malentendido general de lo que significa 'verificar un certificado'. Trataré de escribir una breve explicación aquí para eliminar algunas de las ilusiones.
control del certificado es acerca de la comprobación de una firma en el certificado de metadatos (es decir, tema, período de validez, extensiones y tal) en contra de algunos firma criptográfica.
Si todo lo que tiene para la validación es un certificado autofirmado, no puede distinguirlo de otro certificado autofirmado con exactamente los mismos metadatos, pero la clave diferente, a menos que conozca la clave del certificado clave con anticipación. Y no olvide que establece todo este procedimiento de verificación para eliminar el requisito de tener este conocimiento precompartido. Con la verificación regular del certificado, no puede eliminar por completo el requisito de tener algún conocimiento precompartido, que es un conjunto de certificados de terceros, también conocidos como 'certificados de CA'. Dado que este conocimiento se comparte previamente, esos certificados pueden estar autofirmados, pero recuerde que ha recibido información sobre la validez de esos certificados, no del proceso de verificación, sino de algún conocimiento externo.
Cuando se tiene un conjunto de confianza '' certificados de CA distribuidos entre pares, se pueden utilizar aquellos para firmar otros certificados y comprobar las firmas en contra de que el conocimiento pre-compartida de CA de confianza.
Pero si no tiene conocimiento adicional sobre un certificado autofirmado excepto el certificado en sí mismo, no puede hacer suposiciones sobre la confianza de este certificado en particular, ya que puede ser emitido por algún hacker malvado o por su servidor confiable.
Por favor, obtenga algunos conocimientos sobre Man in the middle attack, Public key infrastructure y Public key cryptography en general antes de implementar cualquier tipo de proceso de verificación de certificados.
Por favor, comprenda que la verificación ciega de un certificado autofirmado no lo protegerá ni siquiera de un hacker inteligente en su propia red, ni siquiera considerando la seguridad de Internet en general.
Editar:: el autor de la pregunta aclaró que en realidad estaba buscando cómo verificar una firma de verisign (u otra CA) en un certificado que utiliza enlaces M2Crypto. He aquí dos ejemplos:
from M2Crypto import X509, SSL
# manual validation of a signature on a certificate using a given CA cert:
ca = X509.load_cert('/path/to/ca_cert.pem')
cert = X509.load_cert('certificate_to_validate.pem')
print "Verification results:", cert.verify(ca.get_pubkey())
# adding a given CA cert to the SSL Context for verification
ctx = SSL.Context()
# load a certificate from file
ctx.load_verify_locations(cafile='/path/to/ca_cert.pem')
# or use all certificate in a CA directory
ctx.load_verify_locations(capath='/path/to/ca/dir')
# or you can specify both options at the same time.
Si va a utilizar un directorio con muchos certificados de CA (que a menudo es más conveniente), debe cambiar el nombre de cada certificado de <hash>.0
donde <hash>
es el hash del asunto del certificado (obtenido con openssl x509 -noout -hash -in cert.pem
).
Lo siento, mi pregunta fue incorrecta. – Bhargava
Estaba buscando una verificación de certificado firmada por Verisign usando M2Crypto. – Bhargava
He actualizado la respuesta con ejemplos de M2Crypto. – abbot