我正在尝试使用stunnel来获得旧的usenet客户端来支持SSL。 我尝试了以下configuration:
[myservice] accept = <LOCAL_PORT> connect = <REMOTE_HOST>:<REMOTE_PORT>
但是stunnel一直没有通过这个错误:
Section myservice: SSL server needs a certificate
我究竟做错了什么?
在[myservice]部分设置client = yes 。 这告诉stunnel connect (又名“服务器”)端是SSL,而accept (又名“客户端”)端是简单的。 缺省是相反的,这需要一个SSL证书。
但是,这不是全部! 出于某种疯狂的原因,stunnel默认为完全不安全的模式,不validation服务器的证书,这意味着您将受到中间人(MitM)攻击! 要解决这个问题,请使用verify = 2和CAfile选项。 在Ubuntu上, CAfile可以在/etc/ssl/certs/ca-certificates.crtfind(来自ca-certificates包)。 当你在这里,也设置options = NO_SSLv2禁用不安全的SSLv2协议。
最后,当你configuration你的usenet程序时,禁用SSL,因为应用程序和stunnel之间的连接不使用SSL。
我写了下面的包装脚本来帮助这个。 根据需要replace<LOCAL_PORT> , <REMOTE_HOST>和<REMOTE_PORT> ,并将# ...replace为您要运行的任何命令。
#!/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")