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 కూడా వేరే: క్లయింట్ సర్టిఫికెట్ ఇవ్వడం వినియోగదారు పేరు/పాస్వర్డ్ ఆధారాలను ఇవ్వదు.