使用しようとしていますスタンネル古い 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.crt
ca-certificates
options = 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")