通过Stunnel+OpenSSL+Privoxy建立SSL Http Proxy服务器及客户端
Http Proxy 没有加密,连 HTTP/1.1 协议的用户密码也是明文传输的,网络嗅包器怎么多,实在不安全。如何建立一个高度安全的 Http Proxy,保证服务器和客户端之间的通信安全?通过 Stunnel + OpenSSL + Privoxy 可以做到。
SSL Http Proxy 服务器:
Privoxy (提供 Http 代理) —> 通过 Stunnel 把 Http 代理映射/转换成 SSL 代理
SSL Http Proxy 客户端:
通过 Stunnel 把 SSL 代理映射/转换成 Http 代理 —> 在浏览器设置 Http 代理
这样服务器和客户端之间的通信就有了 SSL 加密保障。
涉及的软件:
Stunnel: Socket端口 SSL 加密/解密、映射/转换,需要 OpenSSL 库
Openssl: 提供 SSL 加密/解密动态库(libeay32.dll、libssl32.dll、openssl.exe)
Privoxy: Http Proxy 服务器
这三个软件在 MS Windows 和 Linux 下都有相应版本,并且是 OpenSource 的软件(奔放、自由)。三个软件都很优秀。OpenSSL 不用说了;Stunnel 两年前我就在用,使用也很稳定;Privoxy 的前身也是 Http Proxy 服务器,多年的实际使用,有广泛的用户。
为了便于初次使用者方便,我写下了 MS Windows 下的安装及使用步骤
测试平台:MS Windows 2000 (三个软件兼容 MS Windows XP/2000/NT/98)
SSL Http Proxy 服务器安装:
1、安装 Privoxy
先下载 Privoxy 软件,http://sourceforge.net/projects/ijbswa/ 的下载, MS Windows 只有图形版本,控制台版本需要下载源程序编译,或使用我编译好的(见附件)。这里使用的是 privoxy-3.0.0-stable 版的控制台版本/图形版本进行测试。
2、配置 Privoxy
Privoxy 的主要配置文件是 config.txt
通过编辑软件打开,如:记事本–notepad。config.txt中有几个重要的选项:
1、listen-address : Http Proxy 的端口,默认的是127.0.0.1:8118
2、logfile privoxy.log :记录,如果不指定文件名将不记录,但会打印在屏幕
3、jarfile jar.log :客户端 cookies 的记录存放文件,如果不指定文件名,客户端无法使用 cookies
4、permit-access、deny-access :允许/拒绝的IP/域名,建议只允许 localhost “permit-access localhost”,外部的网络通过 Stunnel 提供的 SSL 加密代理
config.txt 的这些配置满足一般需要了,其他的请看 config.txt 内的注释。
Privoxy 还有其他的配置文件,用于过滤网站、广告等功能扩展,因为不是必须的配置,略。
3、运行 Privoxy
Http 代理出来了,它向 Stunnel 提供一个 Http 代理端口。
4、安装 Stunnel
下载 Stunnel 软件。这里使用的是 stunnel-4.00.exe 版。Stunnel需要 OpenSSL 库支持,所以还要下载 Openssl 的支持文件–libeay32.dll、libssl32.dll、openssl.exe。将下载的文件放到同一个目录下。
5、创建服务器证书
Stunnel 客户方式不需要证书。Stunnel 服务方式需要一个证书文件。
Stunnel 在 SSL Http Proxy 服务器是以服务方式运行的,所以必须要有一个证书。通过 openssl.exe 创建服务器证书。下面我将 Stunnel 关于创建证书的翻译如下:
“…运行下面的命令
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 使用的配置文件 (可能需要修改的有[CA_default]和[req_distinguished_name]这两个 section,译者)
-out stunnel.pem
把 SSL 证书写到哪里
-keyout stunnel.pem
把 SSL 证书放到这个文件中
这个命令将会问你以下问题:
问题的回答示范
Country name PL, UK, US, CA
State or Province name Illinois, Ontario
Locality Chicago, Toronto
Organization Name Bill’s Meats, Acme Anvils
Organizational Unit Name Ecommerce Division
Common Name (FQDN) www.example.com
注意:Common Name (FQDN) 应该是运行 stunnel 机器的主机名。如果你能通过不同的主机名访问这台机器,有些 SSL 客户会警告这个主机的证书有问题,所以最好是使它和用户访问的主机名匹配。
openssl gendh 512>> stunnel.pem
这将生成 Diffie-Hellman 部分, 追加到 pem 文件中。这个只有在你指定 stunnel 使用 DH 才需要, 但默认是不用的。(实际好象是必须的,可能是后来改了,译者)
openssl x509 -subject -dates -fingerprint -in stunnel.pem
这个命令是将你的证书信息在屏幕显示出来。”
6、配置/运行 Stunnel
stunnel-4.00 默认配置文件是 stunnel.conf
下面是最小的服务方式配置文件内容示范:
key = stunnel.pem
[http2ssl]
accept = 443
connect = 127.0.0.1:8118
含义:使用 stunnel.pem 证书,将 127.0.0.1: 8118 的端口加密映射成本机443端口,“ http2ssl ”是名称,可以改成其他的标识。
配置文件文件还有其他内容,详情请看帮助。
直接运行stunnel-4.00.exe,就可以启动 Stunnel 了。
7、将Stunnel 安装成 MS NT 服务方式(可选)
stunnel-4.00.exe 也可以作为 MS NT 服务方式启动,在 Stunnel 所有设置完成后,运行 stunnel-4.00.exe -install 将会安装成服务。
安装成服务后
运行 net start “stunnel 4.00” 启动 stunnel 4.00 服务。
运行 net stop “stunnel 4.00” 停止 stunnel 4.00 服务。
运行 stunnel-4.00.exe -uninstall 卸载 stunnel 4.00 服务。
注意:即使是 MS NT 服务方式启动,当启动 stunnel 4.00 服务的时候,在托盘还是有 Stunnel 的图标。不想托盘有 Stunnel 的图标,可以用 stunnel-3.22 控制台版本。
stunnel-3.22 控制台的简要说明:
服务器运行参数示范:
stunnel-3.22.exe -d 443 -r 127.0.0.1:8118
含义将 127.0.0.1:8118 的端口加密映射成本机443端口
客户端运行参数示范:
stunnel-3.22.exe -c -d 127.0.0.1:80 -r 192.168.0.1:443
含义将 192.168.0.1:443 的端口解密映射成本机80端口
这样 SSL Http Proxy 服务器就完成了。
下面看看客户端是怎么使用的
因为 SSL Http Proxy 是特殊的 Http 代理,所以客户端不能直接使用,需要下载软件 Stunnel。
客户端使用:
1、安装 Stunnel
下载 Stunnel 软件。这里使用的是 stunnel-4.00.exe 版。Stunnel需要 OpenSSL 库支持,所以还要下载 Openssl 的支持文件–libeay32.dll、libssl32.dll。将下载的文件放到同一个目录下。
2、配置/运行 Stunnel
stunnel-4.00 默认配置文件是 stunnel.conf
下面是最小的客户方式配置文件内容示范:
client = yes
[ssl2http]
accept = 127.0.0.1:80
connect = 192.168.0.1:443
含义:使用客户方式方式,将 192.168.0.1:443 的端口解密映射成本机80端口,“ ssl2http ”是名称,可以改成其他的标识。
accept设置为127.0.0.1:80,只允许127.0.0.1–本机使用这个80端口代理,禁止了其他人使用你的机器作代理 。
配置文件文件还有其他内容,详情请看帮助。
直接运行stunnel-4.00.exe,就可以启动 Stunnel 了。
3、在浏览器设置 Http 代理
现在代理是:127.0.0.1:80。注意在 IE 设置 Http 代理时,“ IE |工具| Internet 选项|连接”有两种:“局域网(LAN)设置”和“拨号和虚拟专用网络设置”。“局域网(LAN)设置”对局域网生效;“拨号和虚拟专用网络设置”对拨号 网络生效。
但有时“拨号和虚拟专用网络设置”设置的代理会失效,不通过代理直接访问网站。原因可能是多种上网环境,显式的是拨号上网,还有隐式的 NAT、DHCP(有些是这样)。通过隐式的方式出去,就出现“拨号和虚拟专用网络设置”设置的代理失效。可以将“局域网(LAN)设置”和“拨号和虚拟 专用网络设置”都设置代理来避免这种情况。
现在客户端就畅快的通过 SSL Http Proxy 来浏览网站吧!
后记
Stunnel 的用途很多,通过类似的方法,我们可以给 Smtp/Pop3、Socks4/5、Ftp 等加上 SSL 隧道,甚至可以创建 VPN 。e-Border 有类似的解决方案–加密的Socks5代理,但不是免费的。
这里涉及 Stunnel 的使用是最简单的一种,如客户端也有证书认证等,没有涉及。Privoxy 这里也简单运用,Privoxy 的其他功能,如过滤恶意的广告等,也没有涉及。
相关网站: