webentwicklung-frage-antwort-db.com.de

Wie überprüfe ich mit aiohttp das Ablaufdatum eines SSL-Zertifikats?

Ich weiß, wie man mit pyopenssl Zertifikatinformationen wie das Ablaufdatum abruft, aber ist es möglich, dies mit einem aiohttp Antwortobjekt zu tun?

5
azmeuk

Ich konnte es in der Dokumentation von aiohttp nicht finden, aber Sie können ssl verwenden, um das cert und OpenSSL zu bekommen, um das notAfter-Datum zu erhalten. Vergleichen Sie es mit Ihrem aktuellen Datum, um herauszufinden, ob es abgelaufen ist oder nicht. Weitere Details hier Importieren von OpenSSL in Python Und ein Codefragment, das ziemlich genau das macht, was Sie unter Benötigen. Sie müssen OpenSSL installieren vorher aber

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()

Informationen zu Websites, die SNI verwenden, finden Sie in der folgenden Antwort, wie Sie das Zertifikat ssl.get_server_certificate für Sites mit SNI (Server Name Indication) erhalten.

9
BoboDarph

Vorherige Antworten sind korrekt, aber Sie können auch die Socket-Lib verwenden (dies ist ein Test mit 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)

 enter image description here

1
grepit

Überprüfen Sie dieses Repo mit dem Namen check-tls-certs . Es ist nicht wirklich aiohttp, aber es basiert auf asyncio und funktioniert daher asynchron.

1
dio