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

సంబంధిత వ్యాసాలు