设置 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")

相关内容