通常我们使用代理服务器时,浏览器与代理服务器之间的传输都是明文的,虽然https是加密的,但是https会话开始时依然是明文的,例如,https会话开始时浏览器发送的
CONNECT www.google.com:443 HTTP/1.1
就是明文的,审查者仍然可以知道你访问了什么网站,如果是他们不喜欢的网站,他们就可以阻止你继续访问。
本文教你如何使用ssl保护你与代理服务器之间的连接。
需要的软件
服务器端squid 2.6以上,编译时开启了--enable-ssl
chrome/chromium浏览器 加SwitchySharp插件
服务器端配置
如果你的系统软件仓库中带的squid编译时没有加 --enable-ssl选项,你需要下载squid的源码,添加--enable-ssl选项重新编译
生成证书
如果你有现成的证书可以直接使用,如果没有,生成一个自签名的证书,命令如下
openssl genrsa -out server.key 2048
openssl req -new -x509 -out server.crt -key server.key -days 365
squid 配置
在配置文件squid.conf中添加
https_port 8004 cert=/path/to/server.crt key=/path/to/server.key
防火墙需要允许8004的连接
iptables -A INPUT -p tcp --dport 8004 -j ACCEPT
浏览器设置
到目前为止(2014-07)只有chrome/chromium支持ssl连接到代理服务器,并且只能通过pac配置
新建一个文本文件命名为proxy.pac,添加如下内容
function FindProxyForURL(url, host){
return "HTTPS your_proxy_server_name:8004";
}
把your_proxy_server_name 替换成你的代理服务器ip或域名
在SwitchySharp中新建一个情景模式,命名为myproxy_ssl,选择自动配置,然后点击导入pac文件,选择你刚才新建的proxy.pac文件,保存
切换到myproxy_ssl,测试代理服务器能否正常连接
证书问题
如果使用的是自签名的证书,浏览器会报证书错误,把服务器上的server.crt作为信任的根证书导入浏览器的信任列表即可
参考来源
http://wiki.squid-cache.org/Features/HTTPS
http://dev.chromium.org/developers/design-documents/secure-web-proxy
没有评论:
发表评论