Windows で Stunnel を使用してクライアント サーバー アプリ トラフィックを暗号化する方法

Stunnelを初めて設定するのは、特にSSL/TLSや証明書の扱いに慣れていない場合は、少し頭を悩ませるかもしれません。Stunnelは強力ですが、少々扱いにくいツールの一つです。タイプミスやファイルの不足があると、接続できなくなったり、不可解なエラーが表示されたりします。特にWindowsでは、権限やファイアウォールが予期せぬ問題を引き起こす可能性があるため、設定には試行錯誤が必要になることもあります。しかし、一度設定ができれば、完全なVPNを導入することなく、暗号化をネイティブでサポートしていないレガシーアプリやサービスを安全に保護するための、かなり確実な方法が得られます。このガイドでは、証明書認証とTLS暗号化を備えたシンプルなサーバーとクライアントのインストールと設定方法を順を追って説明します。これにより、手間をかけずにトラフィックの保護を開始できます。

Stunnelの設定を修正してスムーズに動作させる方法

Windows で Stunnel を使用する: サーバー側をうまく動作させる

このパートでは、Stunnelをサーバーとして設定する方法について説明します。これは、暗号化された接続をリッスンし、内部で転送する主要な設定です。これが時々難しいのは、Windowsのファイアウォールや証明書の生成方法に問題があったり、正しいファイルを指定するのを忘れたりすることがあるためです。重要なのは、設定を正しく行い、Windowsファイアウォールでポート(HTTPSの場合は443など)を開くことです。Windowsは当然のことながら、必要以上に設定を難しくしているからです。

インストーラーをダウンロードし、実行時にデフォルトのオプションを選択してください。これには、opensslすべての証明書を生成するために必要なツールのインストールも含まれます。その後、管理者権限でコマンドプロンプトを開き、`c:\Program Files (x86)\stunnel\bin`に移動します。ここには、鍵と証明書を作成するための OpenSSL バイナリが格納されています。

  • CA 秘密キーを生成します:openssl genpkey -algorithm RSA -out ca.keyこれはルート CA なので、パスワードは必要ありません。
  • CA 証明書を作成します:サブジェクト情報が、後でこの CA を識別できるほど十分に説明的であることopenssl req -new -x509 -key ca.key -out ca.crt -subj "/O=woshubLTD/OU=IT/CN=CA_webserver1.com"を確認してください。
  • サーバーの秘密鍵を生成します: openssl genpkey -algorithm RSA -out server.key
  • サーバーの CSR を作成します: openssl req -key server.key -new -out server.csr
  • CA を使用して CSR に署名しますopenssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 365 -subj "/O=woshubLTD/OU=IT/CN=server_webserver1.com"。これで、この証明書はトンネル内の HTTPS に使用できるようになります。
  • クライアント証明書についても同様の手順を実行します。クライアント キー ( openssl genpkey -algorithm RSA -out client.key)、CSR を生成し、CA を使用して署名します。

次に、CA、サーバー証明書、および秘密鍵を`C:\Program Files (x86)\stunnel\config`にコピーします。例えば、ca.crtserver.crt、 などです。stunnel.confserver.keyを編集して簡単なテストを実行することもできます。

; Basic log info, helps with debugging debug = info output = stunnel.log ; Encryption stuff, tweak if needed options = CIPHER_SERVER_PREFERENCE options = NO_SSLv2 options = NO_SSLv3 options = NO_TLSv1 sslVersion = TLSv1.2 sslVersion = TLSv1.3 ciphers = ECDHE-RSA-AES256-GCM-SHA384 ; Paths to certs cert = server.crt key = server.key CAfile = ca.crt ; The actual tunnel service setup — replace IPs and ports as needed [ITPortal] accept = 192.168.158.144:443 connect = 127.0.0.1:80 verify=2 

ポート(443など)が他の用途で使用されていないことを確認してください。次に、Windows Defenderファイアウォールでそのポートを開きます。PowerShellコマンドで次のように実行できます。

New-NetFirewallRule -DisplayName "ITPortal_stunnel_443" -Direction Inbound -LocalPort 443 -Protocol TCP -Action Allow

これは必須です。そうしないと、接続がブロックされてしまいます。

設定で Stunnel GUI を 1 回 起動してエラーがないか確認します。問題がなければ閉じ、管理者としてコマンド プロンプトを開き、サービスとしてインストールします。

"C:\Program Files (x86)\stunnel\bin\stunnel.exe" -install "C:\Program Files (x86)\stunnel\config\stunnel.conf"

次に、次のように起動します。

Start-Service wrapper

これにより、TLSラッパーがバックグラウンドで実行され、ポート443をリッスンするようになります。簡単ですよね? いや、ほぼ完了です。エラーが表示されたり接続できなかったりする場合は、ログファイルでstunnel.log問題箇所を確認してください。場合によっては、タイプミス、ファイルの不足、ファイアウォールの問題などが考えられます。

クライアント側をサーバー側と一致させる

クライアントの設定は似ていますが、大部分は簡単です。Stunnelをインストールし、CA証明書(https://github.com/memstechtips/Winhance)とクライアント証明書を`C:\Program Files (x86)\stunnel\config`にコピーします。その後、設定を調整します。

[ITPortal] client = yes accept = localhost:8080 connect = 192.168.158.144:443 CAfile = ca.crt cert = client.crt key = client.key verify=2 

クライアントでStunnelを実行し、ブラウザで にアクセスするとlocalhost:8080、リモートサーバーへ安全にリダイレクトされます。必要であれば、クライアント証明書とキーを1つのPEMファイルにまとめ(例: を使用Get-Content client.key, client.crt | Set-Content client.pem)、 にアクセスすることもできますcert = client.pem。ただし、後でこれをサービスとして実行する場合は、同じ証明書にアクセスでき、権限が正しく設定されている必要があることに注意してください。

最後に、侵害された証明書を失効させる必要がある場合は、証明書失効リストを含むフォルダを指すCRLpathオプションを追加してください。より高度な設定については、自動化のコツやその他の設定の秘密については、こちらのGitHubリポジトリをご覧ください。

以上です。すべてを正しく設定するのは少し面倒ですが、一度設定してしまえば、Stunnel は従来のサービスを暗号化したり、VPN を介さずに安全なトンネルを素早く構築したりするのに非常に役立ちます。

まとめ

  • すべての証明書とキーは OpenSSL で生成されましたが、大きな驚きはありません。
  • パスとポートに注意しながら、stunnel.conf を慎重に構成しました。
  • トンネルがブロックされないように、受信ファイアウォール ルールを設定します。
  • サービスを開始し、ログでエラーを確認しました。通常、ここで誤った構成が見つかります。
  • ブラウザまたは curl を使用してテストし、トラフィックがネットワーク上で暗号化されていることを確認しました。

まとめ

Stunnel を問題なく動作させるにはある程度の忍耐が必要ですが、一度動作するようになれば、最新の TLS 標準をサポートしていないレガシーサーバーやアプリ上のトラフィックを暗号化するための非常に堅牢な設定になります。重要なのは、証明書チェーンを整理し、ファイアウォールのルールを二重に確認することです。エラーが発生した場合は、通常、ログを確認するのが最善策です。また、変更後にサービスを再起動する必要がある場合もあります。これで、誰かの時間を数時間短縮したり、少なくとも最初の試行でうまくいかなかったときにパニックに陥ったりしなくて済むことを願っています。