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

Gerçekten onaylanmış dosyaları kullanın. proxy-roots.pem aracıyı doğrular; proxy-client.pem ve eşleşen özel anahtarı bu istemciyi o aracıya tanıtır. origin_tls hedefin ayrı güven ilkesini korur.

Proxy URL'sinin https şeması o ilk TLS alışverişi için gereklidir. HTTPS hedefi için urllib3 ardından dış TLS oturumu içinde CONNECT gönderir ve web sitesi TLS'ini tünel üzerinden gerçekleştirir.

Web sitesi de istemci sertifikası istiyorsa bunu origin_tls üzerine koyun. Proxy kimliğini orada yeniden kullanmak farklı bir bağlantıyı doğrular.

HTTPS taşıyan sıradan bir HTTP proxy'sinin dış TLS el sıkışması yoktur. Ek bir HTTP 407 de ayrıdır: istemci sertifikası sunmak kullanıcı adı/parola kimlik bilgilerini sağlamaz.

İlgili makaleler