프록시 리스너의 문서에 명시된 스킴을 사용하세요. HTTP 프록시 목록에서 후보를 고를 때는 클라이언트를 설정하기 전에 리스너의 스킴부터 확인해야 합니다. HTTPS 사이트에 접속할 때도 http://proxy.example:8080 를 사용할 수 있습니다. 이를 https:// 로 바꾸면 프록시에 다른 방식으로 연결하겠다는 뜻이 됩니다.

프록시 URL웹사이트 URL연결 방식
http://proxy.example:8080http://example.com/프록시와 목적지 모두에 평문 HTTP로 연결합니다.
http://proxy.example:8080https://example.com/프록시에 HTTP CONNECT를 보낸 뒤 터널 안에서 목적지와 TLS로 통신합니다.
https://proxy.example:8443https://example.com/프록시와 TLS로 연결하고, 그 연결 안에 목적지 터널을 구성합니다.

CONNECT를 허용하는 일반 HTTP 리스너라면 다음 설정은 서로 맞습니다.

curl --proxy http://127.0.0.1:8080 https://example.com/

웹사이트의 TLS 핸드셰이크는 프록시가 터널을 받아들인 뒤에 이루어집니다. 리스너가 평문 HTTP만 이해하는데 프록시 URL을 https:// 로 바꾸면, 웹사이트에 연결하기도 전에 프록시와의 TLS 협상이 실패할 수 있습니다.

프록시까지 TLS로 연결하면 달라지는 점

TLS를 지원하는 프록시는 CONNECT 교환과 프록시 인증을 포함한 클라이언트와 프록시 사이의 통신을 해당 경로의 수동 감청으로부터 보호합니다. 프록시 운영자는 여전히 연결을 처리하며 터널의 목적지를 압니다. 이 모드를 쓰려면 클라이언트와 리스너가 모두 지원해야 합니다.

curl --proxy https://proxy.example:8443 https://example.com/

서비스의 실제 호스트 이름을 사용하세요. 인증서는 그 이름과 일치해야 하고 신뢰할 수 있어야 합니다. 목적지와 포트 제한은 여전히 적용됩니다.

양쪽 모두 HTTPS를 쓰면 인증서 검사가 두 번 이루어집니다. curl에서는 이를 따로 설정할 수 있습니다.

curl --proxy https://proxy.example:8443 --proxy-cacert proxy-ca.pem --cacert origin-ca.pem https://example.com/

--proxy-cacert 는 프록시를 신뢰하는 데, --cacert 는 목적지를 신뢰하는 데 사용됩니다. 필요하면 관리자가 제공한 인증서 묶음을 사용하세요. 시스템의 신뢰 설정만으로 충분할 수도 있습니다. 어느 쪽이든 바꾸기 전에 어떤 핸드셰이크가 실패했는지 확인해야 합니다.

프록시 목록의 ‘HTTPS’ 표시는 해당 엔드포인트가 CONNECT 테스트를 통과했다는 뜻일 뿐일 수 있습니다. 목록이 테스트 방식을 설명하지 않는다면, 그 표시만으로 리스너가 http:// 와 https:// 중 어느 것을 요구하는지 알 수 없습니다.

관련 글