2014年7月9日星期三

通过ssl安全地使用代理服务器

   通常我们使用代理服务器时,浏览器与代理服务器之间的传输都是明文的,虽然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

没有评论:

发表评论