SSL-Proxy mit Stunnel

7277
Ilya

Ich versuche, eine SSL-Verbindung mit Stunnel herzustellen . Eine Art SSL-Proxy.

Endziel
Verbinden Sie nur HTTP- Client mit HTTPS- SERVER .

Mein Plan ist

  1. CLIENT: Endpunkt in PROXY ändern
  2. PROXY: Verwenden Sie stunnel, um Anforderungen von CLIENT zu empfangen und an SERVER weiterzuleiten

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 

Test 1

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

Test 2

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

Ergebnis (Verbindung von CLIENT zu SERVER über PROXY).

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) 

Fragen

  1. Warum stimmt die IP-Adresse nicht mit SERVER überein? Warum ist die Verbindung zu 10.0.2.2 hergestellt?
    Bedeutet das, dass ich mich mit einem falschen Server verbinde? Wie kann das passieren?

  2. Was sagt dieser Fehler aus? Dieser Remote-Server verwendet eine andere Version von SSL, nicht wahr?

3
Was meinst du mit "das verwendet nur SSL, nur https" nixda vor 11 Jahren 0
Ich meine, dass es kein http unterstützt. Es unterstützt nur https. Ilya vor 11 Jahren 0
Ah, natürlich, meine Schuld. Ich habe es bei meiner ersten Bearbeitung falsch interpretiert nixda vor 11 Jahren 0

3 Antworten auf die Frage

0
Laszlo Valko
  1. Warum stimmt die IP-Adresse nicht mit SERVER überein? Warum ist die Verbindung zu 10.0.2.2 hergestellt?

Weil diese IP-Adresse nicht die Adresse des Servers ist, zu dem sie eine Verbindung herstellt, sondern die Adresse des Client- Computers, von dem er empfängt (wobei er Opensl s_client ausführt).

Bedeutet das, dass ich mich mit einem falschen Server verbinde? Wie kann das passieren?

Nein, das hat nichts mit dem Server zu tun.

  1. Was sagt dieser Fehler aus? Dieser Remote-Server verwendet eine andere Version von SSL, nicht wahr?

Dies bedeutet, dass Ihr Stunnel versucht, SSL mit dem Client (openssl s_client) zu kommunizieren, der eine Verbindung herstellt. Sie scheinen sich nicht auf die zu verwendende SSL-Protokollversion zu einigen.

Dies ist jedoch eindeutig falsch. In der Konfiguration, die Sie einrichten möchten, sollte stunnel auf HTTP-Verbindungen warten und diese Verbindung mit HTTPS auf SERVER tunneln. Daher dürfen Sie openssl s_client nicht verwenden, um eine Verbindung zu Ihrem Stunnel herzustellen, da openssl s_client SSL verwenden würde und Stunnel auf Nicht-SSL-Verbindungen warten würde.

Um dies zu lösen, benötigen Sie eine zusätzliche Zeile client = yesin Ihrer Konfiguration. Anstatt openssl s_client als Client für Ihren Stunnel zu verwenden, sollten Sie entweder telnet ( telnet server2 7121) oder ein Programm verwenden, das in der Lage ist, HTTP mit Ihrem Server zu kommunizieren (wie ein Webbrowser oder ähnliches mit einer URL, die wie folgt beginnt http://PROXY:7121/...).

Es wird außerdem dringend empfohlen, IP-Adressen in Ihrer Konfigurationsdatei zu verwenden (anstelle von textlichen Hostnamen).

So etwas sollte für Sie funktionieren:

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

Anscheinend wird dieses Problem in dieser Antwort auf Server-Fehler genau behandelt . Der fettgedruckte Teil scheint Ihrem Szenario zu entsprechen:

Der stunnelServer hat options = NO_SSLv3, aber der Client versucht, eine Verbindung mit SSLv3 herzustellen. Sie müssen ein Upgrade des Clients durchführen, um eine neuere Version von SSL zu unterstützen, oder Sie müssen die Stunnel-Konfiguration ändern, um SSLv3 zu akzeptieren.

-1
把友情留在无盐

Das Hinzufügen zur Konfigurationsdatei reicht aus.

sslversion = all 

und du könntest etwas anderes vermisst haben. Sie sollten explizit "client = yes" festlegen, oder standardmäßig "no".