ใช้บริบท 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 ของ URL พร็อกซีจำเป็นสำหรับการแลกเปลี่ยน TLS ครั้งแรกนั้น สำหรับเป้าหมาย HTTPS urllib3 จะส่ง CONNECT ภายในเซสชัน TLS ชั้นนอกและทำ TLS ของเว็บไซต์ผ่านอุโมงค์
หากเว็บไซต์ต้องการใบรับรองไคลเอนต์ด้วย ให้ใส่ไว้ที่ origin_tls การใช้ตัวตนพร็อกซีซ้ำที่นั่นจะยืนยันการเชื่อมต่ออื่น
พร็อกซี HTTP ทั่วไปที่ขนส่ง HTTPS ไม่มีการจับมือ TLS ชั้นนอก HTTP 407 เพิ่มเติมก็แยกเช่นกัน การให้ใบรับรองไคลเอนต์ไม่ได้ให้ข้อมูลรับรองชื่อผู้ใช้/รหัสผ่าน