単一のアプリケーションに対して SSL をラップするように stunnel を設定する

単一のアプリケーションに対して SSL をラップするように stunnel を設定する

使用しようとしていますスタンネル古い Usenet クライアントで SSL をサポートするには、次の設定を試しました。

[myservice]
accept = <LOCAL_PORT>
connect = <REMOTE_HOST>:<REMOTE_PORT>

しかし、stunnel は次のエラーで失敗し続けました:

Section myservice: SSL server needs a certificate

何が間違っているのでしょうか?

答え1

client = yesセクションで設定します[myservice]。これにより、stunnel にconnect(別名「サーバー」) 側が SSL であり、accept(別名「クライアント」) 側がプレーンであることを伝えます。デフォルトはその逆で、SSL 証明書が必要です。

しかし、それだけではありません。何らかの異常な理由により、stunnel はデフォルトでサーバーの証明書を検証しない完全に安全でないモードに設定されており、中間者 (MitM) 攻撃を受ける可能性があります。これを修正するには、およびverify = 2オプションを使用しますCAfile。Ubuntu では、は(パッケージから)CAfileにあります。ついでに、安全でない SSLv2 プロトコルを無効にするように設定してください。/etc/ssl/certs/ca-certificates.crtca-certificatesoptions = NO_SSLv2

最後に、Usenet プログラムを構成するときは、アプリケーションと stunnel 間の接続では SSL が使用されないため、SSL を無効にします。

これを支援するために、次のラッパー スクリプトを作成しました。、、を適宜置き換え<LOCAL_PORT><REMOTE_HOST>実行<REMOTE_PORT>する# ...コマンドに置き換えます。

#!/bin/bash
PIDFILE=/tmp/stunnel-agent.pid

# Start stunnel in the background.
cat << EOF | stunnel4 -fd 0
pid = $PIDFILE

# Enable proper SSL security.  Without this, you are completely insecure!
verify = 2
CAfile = /etc/ssl/certs/ca-certificates.crt
options = NO_SSLv2

[myservice]
client = yes
accept = <LOCAL_PORT>
connect = <REMOTE_HOST>:<REMOTE_PORT>
EOF

# Start whatever program you want.
# ...

# Kill stunnel.
kill $(cat "$PIDFILE")

関連情報