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

वास्तविक स्वीकृत फ़ाइलों का उपयोग करें। proxy-roots.pem मध्यस्थ को सत्यापित करता है; proxy-client.pem और उसकी मेल खाती निजी कुंजी इस क्लाइंट को उस मध्यस्थ के सामने पहचानती हैं। origin_tls गंतव्य की अलग भरोसा नीति रखता है।

प्रॉक्सी URL की https स्कीम उस पहले TLS आदान-प्रदान के लिए आवश्यक है। HTTPS लक्ष्य के लिए, urllib3 फिर बाहरी TLS सत्र के अंदर CONNECT भेजता है और टनल के माध्यम से वेबसाइट TLS करता है।

यदि वेबसाइट को भी क्लाइंट प्रमाणपत्र चाहिए, तो उसे origin_tls पर रखें। वहाँ प्रॉक्सी पहचान का पुनः उपयोग किसी भिन्न कनेक्शन को प्रमाणित करेगा।

HTTPS ले जाने वाले साधारण HTTP प्रॉक्सी में कोई बाहरी TLS हैंडशेक नहीं होता। अतिरिक्त HTTP 407 भी अलग है: क्लाइंट प्रमाणपत्र देना उपयोगकर्ता नाम/पासवर्ड क्रेडेंशियल नहीं देता।

संबंधित लेख