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도 별개입니다. 클라이언트 인증서를 제공해도 사용자 이름/비밀번호 자격 증명은 제공되지 않습니다.