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

Gamitin ang aktwal na aprubadong mga file. Bineberipika ng proxy-roots.pem ang tagapamagitan; kinikilala ng proxy-client.pem at ng katugmang pribadong susi nito ang kliyenteng ito sa tagapamagitang iyon. Pinapanatili ng origin_tls ang hiwalay na patakaran ng tiwala ng destinasyon.

Ang skema ng https sa URL ng proxy ay mahalaga sa unang palitan ng TLS na iyon. Para sa target na HTTPS, nagpapadala ang urllib3 ng CONNECT sa loob ng panlabas na sesyon ng TLS at ginagawa ang TLS ng website sa pamamagitan ng tunnel.

Kung kailangan din ng website ng client certificate, ilagay ito sa origin_tls. Ang muling paggamit ng pagkakakilanlan ng proxy doon ay magpapatunay sa ibang koneksyon.

Ang karaniwang HTTP proxy na nagdadala ng HTTPS ay walang panlabas na TLS handshake. Ang karagdagang HTTP 407 ay hiwalay din: ang pagbibigay ng client certificate ay hindi nagbibigay ng kredensyal na username/password.

Kaugnay na mga artikulo