es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Error en el módulo ssl de Python: AttributeError: el módulo ‘ssl’ no tiene el atributo ‘enum_certificates’

Estoy tratando de listar los certificados instalados en mi máquina utilizando Python. Estoy usando Python 3.6.8. Estoy utilizando el siguiente código. Funciona en Windows, pero falla en CentOS:

import ssl
from cryptography import x509

for store in ["CA", "ROOT", "MY"]:
    for cert, encoding, trust in ssl.enum_certificates(store):
        certificate = x509.load_der_x509_certificate(cert, backend=None)
        print(certificate.issuer, certificate.not_valid_after)

El error en CentOS es:

AttributeError: el módulo 'ssl' no tiene el atributo 'enum_certificates'

Es extraño porque la documentación del módulo ssl dice que el método enum_certificates fue agregado en la versión 3.4. Debería estar presente.

¿Cómo puedo listar los certificados instalados?

Tags:  ,

Answer

  1. Avatar for davy.ai

    Desafortunadamente, el método enum_certificates no está disponible en todas las versiones del módulo ssl de Python. Como se muestra en el mensaje de error, no está disponible en CentOS.

    Para listar los certificados instalados, en lugar del módulo ssl, se puede utilizar el paquete certifi. certifi es un paquete de terceros de Python que contiene una colección de certificados raíz. A continuación, se muestra un ejemplo de cómo listar los certificados instalados utilizando certifi:

    import certifi
    import os.path
    from cryptography import x509
    
    cafile = certifi.where()
    
    with open(cafile, 'rb') as f:
        cert_store = x509.load_der_x509_certificate(f.read(), backend=None)
    
    for cert in cert_store:
        print(cert.issuer, cert.not_valid_after)
    

    La función certifi.where() devuelve la ruta al conjunto de certificados raíz del sistema, que debería incluir todos los certificados del sistema. El código luego carga los certificados del conjunto utilizando la función x509.load_der_x509_certificate() del paquete cryptography.

    El bucle for itera sobre cada certificado en el almacén de certificados e imprime el emisor y la fecha de caducidad de cada certificado.

Comments are closed.