Gunakan Konteks TLS Terpisah untuk Proxy dan Situs Web urllib3
Muat sertifikat klien proxy HTTPS di proxy_ssl_context, sementara kepercayaan tujuan dan identitas klien tujuan mana pun tetap di ssl_context.
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.