人亦有言进退维谷 2014-07-16
stunnel的优点和shadowsocks一样,但是却比shadowsocks更安全,stunnel可以来ssl证书,比shadowsocks的密码认证更安全,也能有效的避免中间人攻击,把你的shadowsocks数据拦截下,然后暴力破解应该是易如反掌~~
ssl的非对称加密过程参考:http://article.yeeyan.org/view/90729/174903相当安全
单独的stunnel是无法使用的,必须配合http代理,如squid
ubuntulinux服务器端安装:
sudo apt-get install squid3 stunnel4
squid默认代理端口号3128,可自行修改,默认此代理只能本地有权限访问
grep --color '^http_port' /etc/squid3/squid.conf
接下来是stunnel的证书和服务器端配置
1.生成自定义证书:
sudo -s cd /etc/stunnel #stunnel.pem是生成的证书文件名字 openssl req -new -x509 -days 365 -nodes -out stunnel.pem -keyout stunnel.pem #生成证书的过程中需要填写一些国家城市公司等信息,全部随便填写即可 #下面的命令执行的时间叫长 耐心等待 openssl gendh 2048 >> stunnel.pem #出现unable to write 'random state'错误的请执行 rm ~/.rnd #查看生成的证书相关信息 openssl x509 -subject -dates -fingerprint -in stunnel.pem
2.stunnel服务器对客户端证书的验证,stunnel的配置
#查看stunnel默认配置,下面命令结果的最后一行是默认配置 cat /etc/stunnel/README #添加默认配置 sudo cp /usr/share/doc/stunnel4/examples/stunnel.conf-sample /etc/stunnel/stunnel.conf
a.编辑/etc/stunnel/stunnel.conf文件找到chroot=/var/lib/stunnel4/这一行,假如有注释把注释去掉
b.开启调试模式,/etc/stunnel/stunnel.conf文件找到debug=7去掉注释,添加foreground=yes到debug=7下面
#配置证书 cd /var/lib/stunnel4/ sudo mkdir certs cp /etc/stunnel/stunnel.pem certs/`openssl x509 -hash -noout -in /etc/stunnel/stunnel.pem`.0.
接下来编辑/etc/stunnel/stunnel.conf
a.找到cert=/etc/stunnel/mail.pem修改成cert=/etc/stunnel/stunnel.pem,设置cert证书路径
b.找到verify=2去掉注释改成verify=3,开启证书有效性验证
c.找到CApath=/certs有注释去掉注释,这个目录是建立在chroot=/var/lib/stunnel4/基础上,实际就是/var/lib/stunnel4/certs目录,也就是验证证书的目录
d.找到CAfile=/etc/stunnel/certs.pem,有注释去掉注释,并改成之前生成自定义证书的目录:CAfile=/etc/stunnel/stunnel.pem
关于证书的全部设置结束
3.配置stunnel的端口和squid的http代理
编辑/etc/stunnel/stunnel.conf,找到
;**************************************************************************
;*Servicedefinitions(removeallservicesforinetdmode)*
;**************************************************************************
从这里一直文件结尾,全部删除,添加如下内容:
[https]
accept=3128
connect=0.0.0.0:443
简单解释:[https]这个https可以随便写,3128是squid的http代理默认端口,stunnel将使用这个代理,也就是127.0.0.1:3128.connect部分是stunnel客户端将要连接的代理服务器地址和端口号,端口号443可自信随意修改
stunnel服务器端的所有配置完毕,重新启动:
sudo killall stunnel4 sudo /etc/init.d/stunnel4 start
最后是配置stunnel客户端:本人也是ubuntu系统ubuntudesktop
安装stunnel:
#安装stunnel sudo apt-get install stunnel4 #添加默认配置文件 sudo cp /usr/share/doc/stunnel4/examples/stunnel.conf-sample /etc/stunnel/stunnel.conf
开启stunnel调试模式,参考上面stunnel服务器端配置
配置证书
a.把上面stunnel服务器端生成的证书,复制一份到本地
可以这样scp 你的用户名@服务器地址:/etc/stunnel/stunnel.pem /etc/stunnel/stunnel.pem
b.编辑本地/etc/stunnel/stunnel.conf文件,设置证书路径:
找到cert=/etc/stunnel/mail.pem修改成:cert=/etc/stunnel/stunnel.pem
c.找到;**************************************************************************
;*Servicedefinitions(removeallservicesforinetdmode)*
;**************************************************************************
一直到文件结尾全部删除,添加如下内容:
[https]
client=yes
accept=127.0.0.1:8080
connect=stunnel服务器地址:443
简单解释:client=yes表示stunnel是运行的是客户端模式,默认没有代表服务器模式
accept=127.0.0.1:8080当然就是浏览器需要设置的http代理端口了
connect=stunnel服务器地址:443,请自行修改成你的服务器地址和上面设置的端口号443
重启stunnel客户端:
sudo killall stunnel4 sudo /etc/init.d/stunnel4 start
假如所有一切运行正常,然后可以关闭调试模式.注释foreground=yes一行
ubuntu命令行测试非常简单:本地终端执行
export http_proxy='127.0.0.1:8080' wget www.bing.com
若有失败错误,请自行查看调试信息!!
开机自启动可参考:/etc/stunnel/README文件所描述的,把stunnel服务器端和客户端的/etc/default/stunnel4文件里面的ENABLED设置成1
参考:1https://www.digitalocean.com/community/tutorials/how-to-set-up-an-ssl-tunnel-using-stunnel-on-ubuntu
2.https://www.stunnel.org/howto.html
3.http://www.fuweiyi.com/others/2014/05/15/a-Centos-Squid-Stunnel-proxy.html土啬外地址
4.http://stackoverflow.com/questions/94445/using-openssl-what-does-unable-to-write-random-state-mean