په Python کې د HTTP پراکسي له لارې د TLS peer سند لوستل
د socket د تړلو دمخه چې د تصدیق کوونکي SSL context سره وي، د Python د HTTPConnection تونل ملاتړ وکاروئ.
ssl.get_server_certificate له HTTP پراکسي سره خبرې نه کوي. لومړی تونل جوړ کړئ، بیا د منزل hostname سره TLS ترسره کړئ او د peer سند ترلاسه کړئ.
د تصدیق پرته HTTP پراکسي لپاره، د HTTP پراکسي لیست څخه د یو نوماند host او port په کارولو سره:
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 د CONNECT غوښتنه او د هغې ځواب اداره کوي. بیا SSL context د سند له بیرته راګرځولو دمخه زنځیر او د منزل هویت تصدیق کوي. د دې لاس ورکولو لپاره منزل ته HTTP GET ته اړتیا نشته.
که چاپېریال منظور شوی شخصي CA وکاروي، هغه CA په context کې بار کړئ پرځای د دې چې تصدیق بند کړئ. رد شوی زنځیر ښودل شوی لاس ورکول ناکاموي.
getpeercert د peer د پاڼې سند بیرته راګرځوي، نه په اتوماتيک ډول صادر شوی بشپړ زنځیر. د باوري TLS مداخلې سره، د peer سند کېدای شي د منځګړي لخوا د دې hostname لپاره جوړ شوی سند وي. دا توپیر وساتئ کله چې دا د بلې لارې له لارې لیدل شوي سند سره پرتله کوئ.