設定 stunnel 來為單一應用程式包裝 SSL

設定 stunnel 來為單一應用程式包裝 SSL

我正在嘗試使用隧道讓較舊的 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 = 2CAfile選項。在 Ubuntu 上,可以在(從軟體包中)CAfile找到。同時,也要設定禁用不安全的 SSLv2 協定。/etc/ssl/certs/ca-certificates.crtca-certificatesoptions = 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")

相關內容