用STUNNEL和CCPROXY组建加密代理系统

来源:互联网 发布:阿里云查看流量统计 编辑:程序博客网 时间:2024/06/07 08:54

用STUNNEL和CCPROXY组建加密代理系统

Stunnel是什么,它是一个自由的跨平台软件,用于提供全局的TLS/SSL服务。针对自身无法进行TLS或SSL通信

的客户端及服务器,Stunnel可提供安全的加密连接。该软件可在多数操作系统下运行,包括Unix-like系统

,以及Windows。Stunnel依赖于某个独立的库,如OpenSSL或者SSLeay,以实现TLS或SSL协议。
官方网站为:www.stunnel.org
Ccproxy就不要介绍了官方网站为:www.ccproxy.com
这里简单介绍stunnel的安装和配置,安装非常的简单一路next然后install就可以,关键在于stunnel的PEM

密钥,其位置位于stunnel安装目录下的stunnel.pem。用windows自带的记事本可以打开编辑。
要达到安全加密在客户端和服务器端都需要安装stunnel,为了安全,服务器端不要使用stunnel默认安装时

的密钥文件stunnel.pem文件,需要重新生成,客户端的stunnel.pem文件最好不要与服务器端一样,最好每

台机器单独有一个不同的stunnel.pem文件。
密钥的生成可以到官网www.stunnel.org/pem在线生成,该地址直接在官网上可不好找哦,生成后用记事本打

开stunnel.pem文件清楚里面的所有信息,然后把官网生成的密钥复制进去就OK了。
还有一种方法就是下载openssl,解压下载的openssl文件到stunnel安装目录下(注意:解压的四个文件要和

stunnel.exe在同一目录),替换原来的文件(注意备份一下原来的文件哦),然后在dos窗口下运行命令


程序代码


openssl req -new -x509 -days 365 -nodes -config openssl.cnf -out stunnel.pem -keyout

stunnel.pem


运行后会按照提示输入个人信息生成对应的密钥证书文件
其中各参数的含义为:
-days 365
使这个证书的有效期是1年,之后它将不能再用。
-new
创建一个新的证书
-x509
创建一个 X509 证书(自己签名的)
-nodes
证书不作加密
-config openssl.cnf
OpenSSL使用的配置文件
-out stunnel.pem
把数字证书写到哪里
-keyout stunnel.pem
把密钥key放到这个文件中

密钥生成好了下面就要说到配置了,先来配置一下服务器端,配置信息在stunnel.conf文件里需要手动修改

stunnel.conf的内容:
cert = stunnel.pem
key = stunnel.pem
socket = l:TCP_NODELAY=1
socket = r:TCP_NODELAY=1
taskbar=yes
client=no

[http2ssl]
accept = 10086                 //这里为stunnel客户端连接的http端口
connect = 127.0.0.1:8080 //这里为ccproxy的http端口

[socks2ssl]
accept = 10087                 //这里为stunnel客户端连接的socks端口
connect = 127.0.0.1:8081 //这里为ccproxy的socks端口
 

设置好后保存文件完整服务器端设置
客户端同样需要设置,配置信息文件和服务器端一样在stunnel.conf里


stunnel.conf的内容:
cert = stunnel.pem
socket = l:TCP_NODELAY=1
socket = r:TCP_NODELAY=1
client=yes
[http2ssl]
accept = 808         //这里为浏览器代理的http端口
connect = 服务器地址:10086 //这里的端口为上面服务器设置的连接端口
[socks2ssl]
accept = 1080     //这里为浏览器代理的socks端口
connect = 服务器地址:10087  //同上


设置完成后保存。然后客户端浏览器里代理设置为
http   127.0.0.1:808
socks 127.0.0.1:1080
注意这里的IP地址必须为127.0.0.1而不是代理服务器的IP地址

OK,GOOD LUCK!有什么疑问或者问题请留言探讨!

特别注意:
1、客户端和服务端要使用一样的stunnel.pem
2、accept与connect的端口不能相同