urllib3-ന്റെ പ്രോക്സിക്കും വെബ്സൈറ്റിനും വേർതിരിച്ച TLS കോൺടക്സ്റ്റുകൾ ഉപയോഗിക്കുക
HTTPS പ്രോക്സിയുടെ ക്ലയന്റ് സർട്ടിഫിക്കറ്റ് proxy_ssl_context-ൽ ലോഡ് ചെയ്യുക, ലക്ഷ്യസ്ഥാനത്തിന്റെ വിശ്വാസവും ഏതെങ്കിലും ലക്ഷ്യ ക്ലയന്റ് ഐഡന്റിറ്റിയും 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')യഥാർത്ഥത്തിൽ അനുവദിച്ച ഫയലുകൾ ഉപയോഗിക്കുക. proxy-roots.pem ഇടനിലക്കാരനെ പരിശോധിക്കുന്നു; proxy-client.pem ഉം അതിനോട് ചേരുന്ന സ്വകാര്യ കീയും ഈ ക്ലയന്റിനെ ആ ഇടനിലക്കാരനോട് തിരിച്ചറിയിക്കുന്നു. origin_tls ലക്ഷ്യസ്ഥാനത്തിന്റെ വേർതിരിച്ച വിശ്വാസ നയം നിലനിർത്തുന്നു.
പ്രോക്സി URL-ന്റെ https സ്കീം ആ ആദ്യ TLS കൈമാറ്റം എന്നതിന് അത്യാവശ്യമാണ്. HTTPS ലക്ഷ്യത്തിന്, urllib3 പിന്നീട് പുറം TLS സെഷനിനുള്ളിൽ CONNECT അയക്കുകയും ടണലിലൂടെ വെബ്സൈറ്റ് TLS നിർവഹിക്കുകയും ചെയ്യുന്നു.
വെബ്സൈറ്റിനും ക്ലയന്റ് സർട്ടിഫിക്കറ്റ് ആവശ്യമെങ്കിൽ, അത് origin_tls-ൽ ഇടുക. അവിടെ പ്രോക്സി ഐഡന്റിറ്റി വീണ്ടും ഉപയോഗിച്ചാൽ മറ്റൊരു കണക്ഷൻ പ്രാമാണീകരിക്കും.
HTTPS വഹിക്കുന്ന സാധാരണ HTTP പ്രോക്സിക്ക് പുറം TLS ഹാൻഡ്ഷേക്ക് ഇല്ല. അധിക HTTP 407 ഉം വേർതിരിച്ചതാണ്: ക്ലയന്റ് സർട്ടിഫിക്കറ്റ് നൽകുന്നത് ഉപയോക്തൃനാമം/പാസ്വേഡ് ക്രെഡൻഷ്യലുകൾ നൽകുന്നില്ല.