Mark Lodato Asked: 2015-03-02 11:17:14 +0800 CST2015-03-02 11:17:14 +0800 CST 2015-03-02 11:17:14 +0800 CST 设置 stunnel 为单个应用程序包装 SSL 772 我正在尝试使用stunnel让旧的 usenet 客户端支持 SSL。我尝试了以下配置: [myservice] accept = <LOCAL_PORT> connect = <REMOTE_HOST>:<REMOTE_PORT> 但 stunnel 一直因错误而失败: Section myservice: SSL server needs a certificate 我究竟做错了什么? stunnel 1 个回答 Voted Best Answer Mark Lodato 2015-03-02T11:17:46+08:002015-03-02T11:17:46+08:00 设置client = yes在[myservice]部分。这告诉 stunnel connect(又名“服务器”)端是 SSL 端,而accept(又名“客户端”)端是普通的。默认情况相反,它需要 SSL 证书。 但这还不是全部!由于某些疯狂的原因,stunnel 默认为完全不安全的模式,不验证服务器的证书,这意味着您将受到中间人 (MitM) 攻击!要解决此问题,请使用verify = 2和CAfile选项。在 Ubuntu 上,CAfile可以在/etc/ssl/certs/ca-certificates.crt(从ca-certificates包中)找到。当您使用它时,还设置options = NO_SSLv2为禁用不安全的 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")
设置
client = yes
在[myservice]
部分。这告诉 stunnelconnect
(又名“服务器”)端是 SSL 端,而accept
(又名“客户端”)端是普通的。默认情况相反,它需要 SSL 证书。但这还不是全部!由于某些疯狂的原因,stunnel 默认为完全不安全的模式,不验证服务器的证书,这意味着您将受到中间人 (MitM) 攻击!要解决此问题,请使用
verify = 2
和CAfile
选项。在 Ubuntu 上,CAfile
可以在/etc/ssl/certs/ca-certificates.crt
(从ca-certificates
包中)找到。当您使用它时,还设置options = NO_SSLv2
为禁用不安全的 SSLv2 协议。最后,当你配置你的 usenet 程序时,禁用 SSL,因为应用程序和 stunnel 之间的连接不使用 SSL。
我编写了以下包装脚本来帮助解决这个问题。根据需要替换
<LOCAL_PORT>
、<REMOTE_HOST>
和<REMOTE_PORT>
,并替换# ...
为您要运行的任何命令。