我正在嘗試使用隧道讓較舊的 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 程式時,請停用 SSL,因為應用程式和 stunnel 之間的連線不使用 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")