Sé cómo obtener el certificado de información, tales como fecha de vencimiento el uso de pyopenssl por ejemplo, pero es posible hacerlo con un aiohttp objeto de respuesta?

InformationsquelleAutor azmeuk | 2017-05-31

3 Comentarios

  1. 11

    No lo pude encontrar en la documentación de aiohttp, pero usted puede utilizar ssl para obtener el cert y OpenSSL para llegar es notAfter fecha y compararlo con su fecha actual con el fin de averiguar si está caducado o no.
    Más detalles aquí
    Cómo importar OpenSSL en python
    Y un fragmento de código que hace bastante más de lo que necesita a continuación
    Usted tendrá que instalar OpenSSL de antemano sin embargo

    pip install pyopenssl

    import OpenSSL
    import ssl, socket
    cert=ssl.get_server_certificate(('www.google.com', 443))
    x509 = OpenSSL.crypto.load_certificate(OpenSSL.crypto.FILETYPE_PEM, cert)
    x509.get_notAfter()

    Para los sitios que hacen uso de la SNI, consulte la siguiente respuesta sobre cómo obtener el certificado de ssl.get_server_certificate para los sitios con SNI (Server Name Indication)

    • Usted realmente no necesita OpenSSL. serverlescode tiene un ejemplo que no requieren (demasiado largo el post como los comentarios,…)
    • Warning: Esto no funciona con SNI (varios nombres de dominio en una dirección IP), ya que sólo obtiene el certificado en virtud de que la dirección IP, el cual podría ser diferente. Consulte stackoverflow.com/questions/49132025/… para una solución
  2. 4

    Respuestas anteriores son correctas pero, también se puede utilizar el socket lib (esto es de prueba con python 3.7)

    from urllib.request import Request, urlopen, ssl, socket
    from urllib.error import URLError, HTTPError
    import json
    #some site without http/https in the path
    base_url = 'CHANGE_ME_TO_YOUR_SITE'
    port = '443'
    
    hostname = base_url
    context = ssl.create_default_context()
    
    with socket.create_connection((hostname, port)) as sock:
        with context.wrap_socket(sock, server_hostname=hostname) as ssock:
            print(ssock.version())
            data = json.dumps(ssock.getpeercert())
            # print(ssock.getpeercert())
    
    print (data)

    Cómo comprobar un certificado SSL fecha de vencimiento con aiohttp?

    • Me quedo con esta respuesta, no requiere tirando en un paquete externo y la salida es en realidad más sensato para mí; ¿por qué OpenSSL requieren una llamada al método get_notAfter() y get_notBefore()? Estas deben ser las propiedades de los cert…

Dejar respuesta

Please enter your comment!
Please enter your name here