前段时间看到一篇文章:http://www.sunchangming.com/blog/?p=4325 。文章里讲到如果通过node.js来搭建https代理服务器,看了之后自己动手试了试,发现文档写得不是太详细,导致很多地方都需要自己费力去查资料,在此将自己的搭建过程记录一下。
google的chrome以及firefox(11以上)浏览器内置了对基于ssl加密的代理支持,我们可以在这些浏览器上使用spdy代理服务器。使用spdy代理服务器的好处是:
1、安全性比http代理更好,因为他命名浏览器与代理服务器之间的连接也是加密安全的,与vpn或者sock5代理相似;
2、spdy服务器的特性,支持压缩请求头、共用一个tcp连接去请求http资源、设置资源请求优先级等方式来加快网页访问的速度。
要搭建一个node.js+spdy代理服务器,主要有以下几步:
首先要安装node.js,到http://nodejs.org/download/下载相应的安装包即可,最高选版本0.8.x+的版本,因为需要支持npn。
然后要安装node.js的spdyproxy模块,只要执行命令:npm install -g spdyproxy即可。spdyproxy的详细情况可以参见:https://github.com/jammie/node-spdyproxy
最后就是启动spdyproxy,执行命令spdyproxy --help可以看到详细的命令参数:
Options:
--key, -k path to SSL key [required]
--cert, -c path to SSL certificate [required]
--ca, -a path to SSL CA certificate
--port, -p proxy port [default: 44300]
--user, -U basic auth username
--pass, -P basic auth password
--verbose, -v enable verbose logging [default: false]
spdyproxy -k ssl.key -c ssl.crt -p 443 -U XXX -P XXX
wget http://www.sunchangming.com/d/12641
解压后,到根目录下执行:
node main.js -k ssl.key -c ssl.crt -p 443 -U xxx -P xxx
证书你可以使用openssl生成,但是使用通过openssl生成的证书必须在使用的客户端安装一个ca证书才能够正常访问,如果你想要在不同的计算机上使用时,最好使用证书认证机构生成的证书,如startssl。不过麻烦的地方是需要有一个自己的域名,详细的申请流程:http://www.deepvps.com/apply-startssl-ssl-certificate.html ,不知道能不能看到,不能看的话大家懂的,应该怎么办。
openssl生成证书的方法如下:
1、生成私钥
openssl genrsa -des3 -out ca.key 1024
openssl req -new -x509 -days 365 -key ca.key -out ca.crt
openssl pkcs12 -export -out ca.pfx -inkey ca.key -in ca.crt
Error: Error: error:0906406D:PEM routines:PEM_def_callback:problems getting pass
word
openssl rsa -in ca.key -out ca.key
然后在chrome中设置代理,有几种方法:
1、在启动参数后加上:--proxy-server=https://www.myproxyserver.com:443
2、写一个pac文件,然后加上--proxy-pac-url=file:///path/to/my.pac ,pac文件书写如下:
function FindProxyForURL(url, host) {
// Route facebook requests to our proxy
if (shExpMatch(url, "*.facebook.*") || shExpMatch(url, "*://facebook.*")) return 'HTTPS www.myproxyserver.com:443';
return "DIRECT";}
3、使用switchySharp插件,一种是在本地设置中直接将pac文件放到情景模式的自动配置中,但是既然用了这个插件了,自然要使用它的auto切换模式了,不过很可惜,在官方给的0.9版本中尚不支持手动配置中的https代理。我们只能自己修改了,修改方法如下,在下一篇文章中介绍^_^。
以上!!!