Stunnel: SSL에서 SSL로

Stunnel: SSL에서 SSL로

나만 듣는 작은 서비스가 있어요https://localhost:41952소스 호스트 이름을 확인합니다(localhost여야 함). "listen:1988"에 연결하고 stunnel을 사용하여 요청을 "localhost:41952"로 리디렉션하고 싶습니다.

https://192.168.1.10:1988 -> redirect https://localhost:41952

현재 구성:

[myservice]
cert = stunnel.pem
accept = 0.0.0.0:1988
connect = localhost:41952

openssl_client 로그:

http://pastebin.com/7bg3sf7J

이 인증서는 localhost:41952의 인증서와 다릅니다.

컬 테스트:

$ curl https://192.168.1.17:1988/DYMO/DLS/Printing/Check -vk
*   Trying 192.168.1.17...
* Connected to 192.168.1.17 (192.168.1.17) port 1988 (#0)
* TLS 1.2 connection using TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
* Server certificate: localhost
> GET /DYMO/DLS/Printing/Check HTTP/1.1
> Host: 192.168.1.17:1988
> User-Agent: curl/7.43.0
> Accept: */*
> 

영원히 기다리고 있습니다.

어쩌면 내가 필요할까요 client = yes? 하지만 서비스 사이트의 Firefox에서 내보낸 인증서를 제외하고는 인증서가 없습니다.https://localhost:41952

내 원래 질문 :

Windows용 SSL을 사용한 무료 역방향 프록시

답변1

stunnel은 Non-SSL과 SSL 사이에 게이트웨이를 생성하는 프로그램입니다. 로부터홈페이지에 설명:

Stunnel은 프로그램 코드를 변경하지 않고 기존 클라이언트 및 서버에 TLS 암호화 기능을 추가하도록 설계된 프록시입니다.

이 도구는 SSL에서 SSL로의 게이트웨이를 생성하도록 설계되지 않았습니다. 귀하의 경우에 필요한 것은 다음과 같이 수행할 수 있는 간단한 TCP 전달자입니다.소캣:

socat TCP4-LISTEN:1988,fork TCP4:127.0.0.1:41952

이 전달자를 사용하면 192.168.1.17:1988에 대한 연결이 127.0.0.1:41952로 전달됩니다. 전달이 TCP 수준에서 수행되므로 클라이언트는 서버에서 원본 인증서를 가져옵니다. 서버는 127.0.0.1에서 오는 연결을 볼 수 있습니다.

편집: 많은 통신을 거친 후 질문에 올바른 소스 호스트 이름을 주장하는 것이 목표가 아니며 응답에서 주장한 올바른 참조자가 아니라 호스트 HTTP 요청 헤더에 예상 값 'localhost가 있음이 분명해졌습니다. '. 호스트 헤더가 URL에서 설정되므로 요청이 원격 시스템으로 전달되고 브라우저가 URL을 자체적으로 확인하려고 시도하지 않는지 확인해야 합니다. 그렇지 않으면 컴퓨터의 서버에 연결을 시도하기 때문입니다. 브라우저가 실행 중입니다. URL 확인을 대상 시스템으로 연기하려면 거기에서 프록시(예: 시도한 Charles Proxy 또는 일부 SOCKS 프록시)를 실행해야 합니다.

답변2

그래서 연결하려면https://192.168.1.10:1988IP 192.168.1.10을 사용하는 호스트의 루프백 인터페이스 포트 4952에서 수신 대기하는 SSL 서비스에 도달합니다.

우리가 원하는 것을 달성하려면 2개의 충격 연이 필요합니다.

[myservice]
cert = stunnel.pem
client = no
accept = 0.0.0.0:1988
connect = localhost:1987

[myserviceaux]
cert = stunnel.pem
client = yes
accept = localhost:1987
connect = localhost:4952

내가 달성할 수 없는 유일한 것은 stunnel의 모든 요청에 ​​대해 헤더 호스트를 localhost로 수정하는 것입니다.

컬에서는 완벽하게 작동합니다.

$ curl https://192.168.1.10:41951/DYMO/DLS/Printing/Check -k -H "Host: localhost"

답변3

나는 비슷한 HTTPS-TO-HTTPS문제를 해결했습니다.윈도우이 명령을 사용하면:

netsh interface portproxy add v4tov4 listenport=443 listenaddress=127.0.0.1 connectport=[remote-https-port] connectaddress=[remote-ip]

관련 정보