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')

Gunakan file yang benar-benar disetujui. proxy-roots.pem memverifikasi perantara; proxy-client.pem dan kunci privat yang cocok mengidentifikasi klien ini kepada perantara tersebut. origin_tls mempertahankan kebijakan kepercayaan tujuan yang terpisah.

Skema https pada URL proxy sangat penting untuk pertukaran TLS pertama itu. Untuk target HTTPS, urllib3 kemudian mengirim CONNECT di dalam sesi TLS luar dan melakukan TLS situs web melalui terowongan.

Jika situs web juga memerlukan sertifikat klien, letakkan di origin_tls. Menggunakan kembali identitas proxy di sana akan mengautentikasi koneksi yang berbeda.

Proxy HTTP biasa yang membawa HTTPS tidak memiliki handshake TLS luar. HTTP 407 tambahan juga terpisah: memberikan sertifikat klien tidak menyediakan kredensial nama pengguna/kata sandi.

Artikel terkait