SSL-Proxy mit Stunnel

SSL-Proxy mit Stunnel

Ich versuche eine SSL-Verbindung herzustellen mitTunnel. Eine Art SSL-Proxy.

Endziel
Nur http verbindenKLIENTnur auf httpsSERVER.

Mein Plan ist

  1. CLIENT: Endpunkt ändern inPROXY
  2. PROXY: Verwenden Sie Stunnel, um Anfragen vom CLIENT zu empfangen und an den 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

Prüfung 1

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

Prüfung 2

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

Ergebnis(Verbindung vom CLIENT zum 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 nicht mit dem SERVER überein? Warum wird eine Verbindung zu 10.0.2.2 hergestellt?
    Bedeutet das, dass ich mich mit einem falschen Server verbinde? Wie kann das passieren?

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

Antwort1

  1. Warum stimmt die IP nicht mit dem SERVER überein? Warum wird eine Verbindung zu 10.0.2.2 hergestellt?

Denn diese IP-Adresse ist nicht die Adresse desServeres verbindet sich, aber die Adresse desKlientMaschine, von der es empfängt (auf der OpenSSL S_Client ausgeführt wird).

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

Nein, es hat nichts mit dem Server zu tun.

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

Das bedeutet, dass Ihr Stunnel versucht, SSL mit dem Client (openssl s_client) zu kommunizieren, der eine Verbindung herstellt. Sie scheinen sich nicht über die zu verwendende SSL-Protokollversion einig zu sein.

Dies ist jedoch schlichtweg falsch. In der Konfiguration, die Sie einrichten möchten, sollte stunnel auf HTTP-Verbindungen warten und diese Verbindungen mit HTTPS zum SERVER tunneln. Daher dürfen Sie nicht openssl s_client 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 dieses Problem zu lösen, benötigen Sie eine zusätzliche Zeile client = yesin Ihrer Konfiguration. Dann sollten Sie anstelle von openssl s_client als Client für Ihren Stunnel entweder Telnet ( telnet server2 7121) oder ein Programm verwenden, das HTTP mit Ihrem Server kommunizieren kann (wie ein Webbrowser oder ähnliches, dessen URL wie beginnt http://PROXY:7121/...).

Darüber hinaus wird dringend empfohlen, in Ihrer Konfigurationsdatei IP-Adressen zu verwenden (anstelle von textuellen Hostnamen).

So etwas sollte für Sie funktionieren:

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

Antwort2

Es scheint, als ob genau dieses Problem angesprochen wirdin dieser Antwort auf Server Fault; der fettgedruckte Teil scheint zu Ihrem Szenario zu passen:

Der stunnelServer hat options = NO_SSLv3, aber der Client versucht, über SSLv3 eine Verbindung herzustellen.Sie müssen den Client aktualisieren, um eine neuere Version von SSL zu unterstützen, oder Sie müssen die Stunnel-Konfiguration ändern, um SSLv3 zu akzeptieren.

Antwort3

es reicht aus, dies der Konfigurationsdatei hinzuzufügen.

sslversion = all

und vielleicht haben Sie noch etwas übersehen. Sie sollten ausdrücklich „client = yes“ festlegen, sonst wird standardmäßig „no“ verwendet.

verwandte Informationen