web-dev-qa-db-ja.com

Stunnel:sslからssl

https:// localhost:41952 でのみリッスンし、ソースホスト名をチェックする小さなサービスがあります(ローカルホストである必要があります)。 「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を使用した無料のリバースプロキシ

2
user66638

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

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

このツールは、SSLからSSLへのゲートウェイを作成するようには設計されていません。あなたの場合に必要なのは、 socat で実行できる単純な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からの接続を確認します。

編集:多くの通信の後、目的は正しいソースホスト名を要求することではなく、質問で要求された正しいリファラーではなく、ホストHTTP要求ヘッダーが期待値 'localhostを持っていることが明らかになりました'。 HostヘッダーはURLから設定されるため、リクエストがリモートシステムに転送され、ブラウザがURLを自動的に解決しようとしないことを確認する必要があります。そうしないと、マシン上のサーバーに接続しようとするためです。ブラウザが実行されています。 URLの解決をターゲットシステムに延期するには、そこでプロキシを実行する必要があります。つまり、試したCharlesProxyやSOCKSプロキシのようなものです。

3
Steffen Ullrich

したがって、 https://192.168.1.10:1988 に接続し、IP192.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内のすべてのリクエストのヘッダーHostをlocalhostに変更することです。

カールからそれは完全に機能しています:

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

Windowsで同様のHTTPS-TO-HTTPS問題を次のコマンドで解決しました:

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

0
Eslam Hamouda