از بسترهای TLS جداگانه برای پروکسی و وبسایت urllib3 استفاده کنید
گواهی کلاینت پروکسی 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 سیاست اعتماد جداگانه مقصد را حفظ میکند.
طرح https در نشانی پروکسی برای آن نخستین تبادل TLS ضروری است. برای مقصد HTTPS، urllib3 سپس CONNECT را درون نشست بیرونی TLS میفرستد و TLS وبسایت را از طریق تونل انجام میدهد.
اگر وبسایت هم گواهی کلاینت بخواهد، آن را روی origin_tls بگذارید. استفاده مجدد از هویت پروکسی در آنجا اتصال دیگری را احراز هویت میکند.
پروکسی HTTP معمولی که HTTPS را حمل میکند هیچ دستدهی بیرونی TLS ندارد. 407 اضافی HTTP نیز جداست: ارائه گواهی کلاینت، اعتبارنامه نام کاربری/گذرواژه را فراهم نمیکند.