stunnel を使用した SSL プロキシ

stunnel を使用した SSL プロキシ

SSL接続を設定しようとしていますスタンネル何らかの SSL プロキシ。

最終目標
httpのみ接続クライアントhttpsのみサーバ

私の計画は

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

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

答え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 を使用して stunnel に接続することはできません。openssl s_client は SSL を使用し、stunnel は非 SSL 接続を待機するからです。

client = yesこれを解決するには、設定に1 行追加する必要があります。次に、stunnel のクライアントとして openssl s_client を使用する代わりに、telnet ( telnet server2 7121) を使用するか、サーバーに HTTP で通信できるプログラム ( のように始まる URL を持つ Web ブラウザーなど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

もう 1 つ見逃している点があります。明示的に「client = yes」を設定する必要があります。そうしないと、デフォルトで「no」になります。

関連情報