import ssl
import urllib3

proxy_tls = ssl.create_default_context(cafile='proxy-roots.pem')
proxy_tls.load_cert_chain('proxy-client.pem', 'proxy-client.key')
origin_tls = ssl.create_default_context()

with urllib3.ProxyManager(
    'https://proxy.example:8443',
    proxy_ssl_context=proxy_tls,
    ssl_context=origin_tls,
    timeout=urllib3.Timeout(connect=5, read=15),
) as http:
    response = http.request('GET', 'https://service.example/data')

Uporabite dejansko odobrene datoteke. proxy-roots.pem preveri posrednika; proxy-client.pem in pripadajoči zasebni ključ identificirata tega odjemalca pri tem posredniku. origin_tls ohranja ločeno politiko zaupanja cilja.

Shema https naslova URL proxyja je bistvena za to prvo izmenjavo TLS. Za cilj HTTPS urllib3 nato pošlje CONNECT znotraj zunanje seje TLS in izvede TLS spletnega mesta skozi tunel.

Če tudi spletno mesto zahteva odjemalski certifikat, ga vstavite v origin_tls. Ponovna uporaba identitete proxyja tam bi overila drugo povezavo.

Običajni proxy HTTP, ki prenaša HTTPS, nima zunanjega rokovanja TLS. Dodatni HTTP 407 je prav tako ločen: zagotavljanje odjemalskega certifikata ne zagotovi poverilnic uporabniškega imena/gesla.

Sorodni članki