Feu servir contextos TLS separats per al proxy i el lloc web d urllib3
Carregueu el certificat de client del proxy HTTPS a proxy_ssl_context, deixant la confiança del destí i qualsevol identitat de client del destí a 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')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.