web-dev-qa-db-ja.com

stunnelを使用したSSLプロキシ

stunnel でSSL接続を設定しようとしています。ある種のSSLプロキシ。

最終目標
httpのみ[〜#〜] client [〜#〜]をhttpsのみに接続します[ 〜#〜]サーバー[〜#〜]

私の計画は

  1. クライアント:エンドポイントを[〜#〜] proxy [〜#〜]に変更します
  2. プロキシ:stunnelを使用してCLIENTからリクエストを受信し、サーバーに転送します

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

結果(プロキシを介してクライアントからサーバーに接続)。

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を使用していますね。

5
Ilya
  1. IPがSERVERと一致しないのはなぜですか?なぜ10.0.2.2に接続しているのですか?

そのIPアドレスは、接続しているserverのアドレスではなく、受信元のclientマシンのアドレスであるため(openssl s_clientを実行)。

間違ったサーバーに接続しているということですか?どうしてそれが起こるのでしょうか?

いいえ、サーバーとは何の関係もありません。

  1. このエラーは何と言っていますか?そのリモートサーバーは別のバージョンのSSLを使用していますね。

これは、stunnelが接続しているクライアント(openssl s_client)にSSLを話そうとしていることを意味します。彼らは使用するSSLプロトコルのバージョンに同意していないようです。

しかし、これは明らかに間違っています。設定する構成では、stunnelはHTTP接続を待機し、HTTPSを使用してそれらの接続をSERVERにトンネリングする必要があります。したがって、openssl s_clientはSSLを使用し、stunnelは非SSL接続を待機するため、openssls_clientを使用してstunnelに接続することはできません。

これを解決するには、構成にclient = yesの追加行が必要です。次に、openssl s_clientをstunnelのクライアントとして使用する代わりに、telnet(telnet server2 7121)、またはサーバーとHTTPを話すことができるプログラム(Webブラウザーなど、URLで始まる)を使用する必要があります。 http://PROXY:7121/...のように)。

また、構成ファイルでは(テキストのホスト名ではなく)IPアドレスを使用することを強くお勧めします。

このようなものがあなたのために働くはずです:

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

この正確な問題は解決されているようです サーバー障害に関するこの回答では ;太字の部分はシナリオに適しているようです。

stunnelサーバーにはoptions = NO_SSLv3が、クライアントはSSLv3を使用して接続しようとしています。 新しいバージョンのSSLをサポートするようにクライアントをアップグレードするか、SSLv3を受け入れるようにstunnel構成を変更する必要があります。

1
JakeGould