Decodierung von lokalen Zertifikaten wie "ssl.SSLSocket.getpeercert()" für entfernte

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
qupfer
User
Beiträge: 9
Registriert: Samstag 24. Mai 2014, 22:17

Hi,
folgendes Minimalbeispiel gibt mir "gut" Nutzbare Information über ein Zertifikat.

Code: Alles auswählen

#!/usr/bin/env python3

import ssl, socket
HOST="google.com"
PORT=443
context = ssl.create_default_context()
context.check_hostname=False
context.verify_mode = 2
conn = context.wrap_socket(socket.socket(socket.AF_INET), server_hostname=HOST)
conn.connect((HOST, PORT))
cert = conn.getpeercert(False)
cert_der = conn.getpeercert(True)
cert_pem = ssl.DER_cert_to_PEM_cert(cert_der)
print(cert.keys())
print("alternative Namen:")
print(cert.get("subjectAltName"))
print(cert_pem)
exit()
Bei folgenden "Minimalbeispiel" fehlen diese Infos, das Zertifikat gibts aber dennoch (unterschied lediglich: context.verify_mode = 0 )

Code: Alles auswählen

#!/usr/bin/env python3

import ssl, socket
HOST="google.com"
PORT=443
context = ssl.create_default_context()
context.check_hostname=False
context.verify_mode = 0
conn = context.wrap_socket(socket.socket(socket.AF_INET), server_hostname=HOST)
conn.connect((HOST, PORT))
cert = conn.getpeercert(False)
cert_der = conn.getpeercert(True)
cert_pem = ssl.DER_cert_to_PEM_cert(cert_der)
print(cert.keys())
print("alternative Namen:")
print(cert.get("subjectAltName"))
print(cert_pem)
exit()
Gemäß der Dokumentation ist das Verhalten auch richtig
So, hat jemand eine Idee wie ich ein lokales und/oder nicht validiertes Zertifikate ebenso zu einem "dict" bekomme?
Antworten