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

Feu servir els fitxers aprovats reals. proxy-roots.pem verifica l intermediari; proxy-client.pem i la seva clau privada corresponent identifiquen aquest client davant d aquest intermediari. origin_tls manté la política de confiança separada del destí.

L esquema https de l URL del proxy és essencial per a aquest primer intercanvi TLS. Per a un objectiu HTTPS, urllib3 després envia CONNECT dins de la sessió TLS exterior i fa el TLS del lloc web a través del túnel.

Si el lloc web també requereix un certificat de client, poseu-lo a origin_tls. Reutilitzar-hi la identitat del proxy autenticaria una connexió diferent.

Un proxy HTTP normal que transporta HTTPS no té cap handshake TLS exterior. Un 407 HTTP addicional també és separat: proporcionar un certificat de client no aporta credencials d usuari/contrasenya.

Articles relacionats