Stunnel: SSL から SSL

Stunnel: SSL から SSL

私は、https://localhost:41952ソースホスト名をチェックします(localhostである必要があります)。「listen:1988」に接続し、stunnelを使用してリクエストを「localhost:41952」にリダイレクトします。

https://192.168.1.10:1988 -> redirect https://localhost:41952

現在の設定:

[myservice]
cert = stunnel.pem
accept = 0.0.0.0:1988
connect = localhost:41952

openssl_client ログ:

http://pastebin.com/7bg3sf7J

この証明書は localhost:41952 の証明書とは異なることに注意してください。

カールテスト:

$ curl https://192.168.1.17:1988/DYMO/DLS/Printing/Check -vk
*   Trying 192.168.1.17...
* Connected to 192.168.1.17 (192.168.1.17) port 1988 (#0)
* TLS 1.2 connection using TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
* Server certificate: localhost
> GET /DYMO/DLS/Printing/Check HTTP/1.1
> Host: 192.168.1.17:1988
> User-Agent: curl/7.43.0
> Accept: */*
> 

永遠に待っています。

必要かもしれませんかclient = yes?しかし、サービスのサイトでFirefoxからエクスポートしたものを除いて、証明書はありませんhttps://localhost:41952

私の最初の質問:

Windows 用の SSL 対応無料リバース プロキシ

答え1

stunnelは非SSLとSSLの間にゲートウェイを作成するプログラムです。ホームページの説明:

Stunnelは、プログラムのコードを変更することなく、既存のクライアントとサーバーにTLS暗号化機能を追加するように設計されたプロキシです。

このツールはSSLからSSLへのゲートウェイを作成するために設計されたものではありません。必要なのは、次のような単純なTCPフォワーダーだけです。ソカット:

socat TCP4-LISTEN:1988,fork TCP4:127.0.0.1:41952

このフォワーダーを使用すると、192.168.1.17:1988 への接続は 127.0.0.1:41952 に転送されます。転送は TCP レベルで行われるため、クライアントはサーバーから元の証明書を取得します。サーバーは、接続が 127.0.0.1 から来ていることを認識します。

編集: 何度もやり取りした結果、質問で正しいソース ホスト名を主張することや、応答で正しい Referer を主張することではなく、Host HTTP 要求ヘッダーに期待値 'localhost' を設定することが目的であることが明らかになりました。ホスト ヘッダーは URL から設定されるため、要求がリモート システムに転送され、ブラウザーが URL を独自に解決しようとしていないことを確認する必要があります。そうしないと、ブラウザーが実行中のマシン上のサーバーに接続しようとします。URL の解決をターゲット システムに延期するには、そこでプロキシを実行する必要があります。つまり、試した Charles Proxy のようなものか、SOCKS プロキシのいずれかです。

答え2

だから接続するにはhttps://192.168.1.10:1988IP 192.168.1.10 のホスト上のループバック インターフェイスのポート 4952 でリッスンする SSL サービスに到達します。

目的を達成するには、2 つのスタンネル スタンザが必要です。

[myservice]
cert = stunnel.pem
client = no
accept = 0.0.0.0:1988
connect = localhost:1987

[myserviceaux]
cert = stunnel.pem
client = yes
accept = localhost:1987
connect = localhost:4952

私が達成できない唯一のことは、stunnel のすべてのリクエストのヘッダー ホストを localhost に変更することです。

curl からは完璧に動作しています:

$ curl https://192.168.1.10:41951/DYMO/DLS/Printing/Check -k -H "Host: localhost"

答え3

私は同様のHTTPS-TO-HTTPS問題を解決しましたウィンドウズこのコマンドで:

netsh interface portproxy add v4tov4 listenport=443 listenaddress=127.0.0.1 connectport=[remote-https-port] connectaddress=[remote-ip]

関連情報