Stunnel이 포함된 SSL 프록시

Stunnel이 포함된 SSL 프록시

SSL 연결을 설정하려고 합니다.충격을 주다. 일종의 SSL 프록시.

최종 목표
http만 연결고객https로만섬기는 사람.

내 계획은

  1. 클라이언트: 끝점을 다음으로 변경대리
  2. PROXY: stunnel을 사용하여 CLIENT로부터 요청을 수신하고 이를 SERVER로 전달합니다.

stunnel.conf

cert = /etc/stunnel/stunnel.pem
foreground = yes
chroot = /var/run/stunnel
setuid = stunnel
setgid = stunnel
pid = /stunnel.pid
debug = 7
[my_route]
accept = 7121
connect = SERVER:443
;connect = SERVER:443/somedata

테스트 1

$openssl s_client -connect SERVER:443
New, TLSv1/SSLv3, Server public key is 2048 bit

테스트 2

openssl s_client -connect PROXY:7121
New, TLSv1/SSLv3, Server public key is 2048 bit

결과(PROXY를 통해 CLIENT에서 SERVER로 연결)

Service [my_route] accepted (FD=3) from 10.0.2.2:12345
Service [my_route] started
Service [my_route] accepted connection from 10.0.2.2:12345
SSL state (accept): before/accept initialization
SSL_accept: 1408F10B: error:1408F10B:SSL routines:SSL3_GET_RECORD:wrong version number
Connection reset: 0 byte(s) sent to SSL, 0 byte(s) sent to socket
Local socket (FD=3) closed
Service [my_route] finished (0 left)

질문

  1. IP가 SERVER와 일치하지 않는 이유는 무엇입니까? 왜 10.0.2.2에 연결되어 있나요?
    잘못된 서버에 연결하고 있다는 뜻인가요? 어떻게 그런 일이 일어날 수 있나요?

  2. 이 오류는 무엇을 말합니까? 해당 원격 서버는 다른 버전의 SSL을 사용하고 있지 않습니까?

답변1

  1. IP가 SERVER와 일치하지 않는 이유는 무엇입니까? 왜 10.0.2.2에 연결되어 있나요?

해당 IP 주소는 사용자의 주소가 아니기 때문입니다.섬기는 사람에 연결되어 있지만 주소는고객(openssl s_client 실행)에서 수신 중인 머신입니다.

잘못된 서버에 연결하고 있다는 뜻인가요? 어떻게 그런 일이 일어날 수 있나요?

아니요, 서버와는 아무런 관련이 없습니다.

  1. 이 오류는 무엇을 말합니까? 해당 원격 서버는 다른 버전의 SSL을 사용하고 있지 않습니까?

이는 stunnel이 연결 중인 클라이언트(openssl s_client)에 SSL을 전달하려고 시도한다는 의미입니다. 사용할 SSL 프로토콜 버전에 동의하지 않는 것 같습니다.

그러나 이것은 명백히 잘못된 것입니다. 설정하려는 구성에서 stunnel은 HTTP 연결을 기다리고 HTTPS를 사용하여 해당 연결을 SERVER로 터널링해야 합니다. 따라서 openssl s_client는 SSL을 사용하고 stunnel은 SSL이 아닌 연결을 기다리기 때문에 openssl s_client를 사용하여 stunnel에 연결할 수 없습니다.

client = yes이 문제를 해결하려면 구성에 추가 줄이 필요합니다 . 그런 다음 openssl s_client를 stunnel용 클라이언트로 사용하는 대신 telnet( telnet server2 7121) 또는 서버에 HTTP를 연결할 수 있는 프로그램(예: 웹 브라우저 또는 URL이 와 같이 시작하는 유사한 프로그램 http://PROXY:7121/...)을 사용해야 합니다.

또한 구성 파일에서 텍스트 호스트 이름 대신 IP 주소를 사용하는 것이 좋습니다.

다음과 같은 것이 당신에게 도움이 될 것입니다:

[my_route]
client = yes
accept = 7121
connect = aaa.bbb.ccc.ddd:443

답변2

이 정확한 문제가 해결된 것 같습니다.Server Fault에 대한 이 답변에서; 굵게 표시된 부분은 귀하의 시나리오에 적합한 것 같습니다.

서버 stunnel에는 가 있지만 options = NO_SSLv3클라이언트는 SSLv3을 사용하여 연결을 시도하고 있습니다.최신 버전의 SSL을 지원하도록 클라이언트를 업그레이드해야 하거나 SSLv3을 허용하도록 stunnel 구성을 변경해야 합니다.

답변3

이것을 구성 파일에 추가하면 됩니다.

sslversion = all

그리고 당신은 또 다른 것을 놓쳤을 수도 있습니다. 명시적으로 "client = yes"를 설정해야 합니다. 그렇지 않으면 기본값은 "no"입니다.

관련 정보