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ログ:
この証明書は、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
私の最初の質問:
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プロキシのようなものです。
したがって、 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"
Windowsで同様のHTTPS-TO-HTTPS
問題を次のコマンドで解決しました:
netsh interface portproxy add v4tov4 listenport=443 listenaddress=127.0.0.1 connectport=[remote-https-port] connectaddress=[remote-ip]