Aqra ċertifikat peer TLS permezz ta' proxy HTTP f'Python
Uża l-appoġġ tat-tunnel ta' HTTPConnection f'Python qabel ma ddawwar is-socket f'kuntest SSL li jivvalida.
ssl.get_server_certificate ma jinnegozjax proxy HTTP. L-ewwel stabbilixxi t-tunnel, imbagħad wettaq TLS bl-isem tal-host tad-destinazzjoni u ġib iċ-ċertifikat tal-peer.
Għal proxy HTTP mingħajr awtentikazzjoni, billi tuża l-host u l-port ta' kandidat mil-lista tal-proxies HTTP:
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 jimmaniġġja t-talba CONNECT u r-risposta tagħha. Il-kuntest SSL imbagħad jivverifika l-katina u l-identità tad-destinazzjoni qabel ma jintbagħat lura ċ-ċertifikat. L-ebda HTTP GET lid-destinazzjoni mhu meħtieġ għal dan il-handshake.
Jekk l-ambjent juża CA privata approvata, għabbi dik is-CA fil-kuntest minflok ma tiddiżattiva l-verifika. Katina miċħuda tagħmel il-handshake muri jonqos.
getpeercert jirritorna ċ-ċertifikat tal-werqa tal-peer, mhux katina kompleta esportata awtomatikament. B'interċettazzjoni TLS fiduċjuża, iċ-ċertifikat tal-peer jista' jkun iċ-ċertifikat iġġenerat mill-intermedjarju għal dan l-isem tal-host. Żomm dik id-distinzjoni meta tqabbel ma' ċertifikat osservat permezz ta' rotta oħra.