Red de conocimiento informático - Conocimiento informático - Cómo verificar el certificado SSL en Python

Cómo verificar el certificado SSL en Python

importar?os

importar?glob

desde?OpenSSL.SSL?import?Context,?TLSv1_METHOD,?VERIFY_PEER,?VERIFY_FAIL_IF_NO_PEER_CERT,?OP_NO_SSLv2

desde?OpenSSL.crypto?import?load_certificate,?FILETYPE_PEM

desde?twisted.python.urlpath?import?URLPath

desde?twisted.internet.ssl? import?ContextFactory

desde?twisted.internet?import?reactor

desde?twisted.web.client?import?getPage

certificateAuthorityMap?=?{}

for?certFileName?in?glob.glob("/etc/ssl/certs/*.pem"):

#?¿Podría?haber?algunos?muertos? enlaces simbólicos?allí,?así que?asegurémonos?de?que?sea?real.

if?os.path.exists(certFileName):

datos?=?open( certFileName).read()

x509?=?load_certificate(FILETYPE_PEM,?data)

digest?=?x509.digest('sha1')

#?Ahora,?desduplicar?en?caso?el?mismo?certificado?tiene?múltiples?nombres.

certificateAuthorityMap[digest]?=?x509

clase?HTTPSVerifyingContextFactory (ContextFactory):

def?__init__(self,?hostname):

self.hostname?=?hostname

isClient?=?True

def?getContext(self):

ctx?=?Context(TLSv1_METHOD)

store?=?ctx.get_cert_store()

para ?value?in?certificateAuthorityMap.values():

store.add_cert(value)

ctx.set_verify(VERIFY_PEER?|?VERIFY_FAIL_IF_NO_PEER_CERT,?self.verifyHostname)

ctx.set_options(OP_NO_SSLv2)

retorno?ctx

def?verifyHostname(self,?conexión,?x509,?errno,?profundidad,?preverifyOK):

if?preverifyOK:

if?self.hostname?!=?x509.get_subject().commonName:

retu

rn?False

return?preverifyOK

def?secureGet(url):

return?getPage(url,?HTTPSVerifyingContextFactory(URLPath.fromString(url). netloc))

def?done(resultado):

imprimir?'¡Listo!',?len(resultado)

secureGet("/"). addCallback(done)

reactor.run()

Esta verificación requiere la instalación de la biblioteca Twisted.

Por supuesto, existen muchas bibliotecas de este tipo, como: pycurl, request, M2Cryptoimport?requests

requests.get('',?cert='/path/server.crt' ,?verificar =Verdadero)