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

Utilisez les fichiers approuvés réels. proxy-roots.pem vérifie l intermédiaire ; proxy-client.pem et sa clé privée correspondante identifient ce client auprès de cet intermédiaire. origin_tls conserve la politique de confiance distincte de la destination.

Le schéma https de l URL du proxy est essentiel pour ce premier échange TLS. Pour une cible HTTPS, urllib3 envoie ensuite CONNECT dans la session TLS externe et exécute le TLS du site web via le tunnel.

Si le site web exige aussi un certificat client, placez-le sur origin_tls. Réutiliser l identité du proxy à cet endroit authentifierait une autre connexion.

Un proxy HTTP ordinaire transportant HTTPS n a aucune poignée de main TLS externe. Un 407 HTTP supplémentaire est également distinct : fournir un certificat client ne fournit pas d identifiants nom d utilisateur/mot de passe.

Articles similaires