In TLS-peer-sertifikaat lêze fia in HTTP-proxy yn Python
Brûk de tunnelstipe fan HTTPConnection yn Python foar't jo de socket yn in falidearjende SSL-kontekst wikselje.
ssl.get_server_certificate ûnderhannelet gjin HTTP-proxy. Set earst de tunnel op, doch dan TLS mei de hostnamme fan 'e bestimming en helje it peer-sertifikaat op.
Foar in HTTP-proxy sûnder ferifikaasje, mei de host en poarte fan in kandidaat út 'e HTTP-proxylist:
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 behannelt it CONNECT-fersyk en it antwurd dêrop. Dêrnei ferifiearret de SSL-kontekst de keatling en de identiteit fan 'e bestimming foar't it sertifikaat weromjûn wurdt. Foar dizze hânskud is gjin HTTP GET nei de bestimming nedich.
As de omjouwing in goedkarde privee CA brûkt, laad dy CA dan yn 'e kontekst ynstee fan ferifikaasje út te skeakeljen. In wegere keatling lit it toande hânskud mislearje.
getpeercert jout it bledsertifikaat fan 'e peer werom, net in automatysk eksportearre folsleine keatling. By fertroude TLS-ûnderskepping kin it peer-sertifikaat it sertifikaat wêze dat de tuskenpersoan foar dizze hostnamme makke hat. Behâld dat ûnderskie as jo it fergelykje mei in sertifikaat dat fia in oare rûte sjoen is.