ssl.get_server_certificate verhandelt keen HTTP-Proxy. Richt den Tunnel als éischt an, maacht duerno TLS mam Hostnumm vum Zil a kritt d'Peer-Zertifikat.

Fir en HTTP-Proxy ouni Authentifizéierung, mam Host a Port vun engem Kandidat aus der HTTP-Proxy-Lëscht:

from contextlib import closing
import http.client
import ssl

hostname = "example.com"
context = ssl.create_default_context()

with closing(http.client.HTTPConnection(
    "proxy.example.net", 8080, timeout=10
)) as connection:
    connection.set_tunnel(hostname, 443)
    connection.connect()

    with context.wrap_socket(
        connection.sock, server_hostname=hostname
    ) as tls:
        certificate_der = tls.getpeercert(binary_form=True)

certificate_pem = ssl.DER_cert_to_PEM_cert(certificate_der)

HTTPConnection behandelt d'CONNECT-Ufro an hir Äntwert. Duerno iwwerpréift den SSL-Kontext d'Kette an d'Identitéit vum Zil, ier d'Zertifikat zréckginn gëtt. Fir dëse Handshake ass keen HTTP GET un d'Zil noutwendeg.

Wann d'Ëmwelt eng genehmegt privat CA benotzt, lued déi CA an de Kontext amplaz d'Préiwung auszeschalten. Eng refuséiert Kette léisst de gewisenen Handshake feelen.

getpeercert gëtt dem Peer säi Blat-Zertifikat zréck, net eng automatesch exportéiert komplett Kette. Bei vertrauenswierdeger TLS-Interceptioun kann d'Peer-Zertifikat d'Zertifikat sinn, dat den Tëschentmëttel fir dësen Hostnumm erstallt huet. Behaalt dësen Ënnerscheed, wann Dir et mat engem Zertifikat vergläicht, dat iwwer en anere Wee observéiert gouf.

Ähnlech Artikelen