搭建Https proxy 服务器代理上网

架构是这样的,tinyproxy + stunnel。

tinyproxy 是http的代理服务器,但是这样搭建的http proxy是明文的,内容很容易被GFW关键字检测出来,比如说代理浏览google的时候,如果检测出来,连接就会被重置,一段时间内是访问不了了。

所以必须要把明文的内容使用https加密传输起来,因此这样的加密内容是检测不了的。

HTTP Over HTTPS ,stunnel就是一个https隧道,相当于https sever ,需要搭配https证书使用。建议去startSSL等其它地方申请https证书,当然自签证书也可以,可能会报错。

搭建方法(转自别人的资料 http://archboy.org/2014/08/02/https-proxy-server-the-easy-way/):

简单搭建 https proxy 服务器
Serverhttps, proxy, spdy, ssl, stunnelivarptr
在各种上网的方法当中,https proxy 可能是最简单、方便、快速的,它免去了 vpn 各种拨号连接的麻烦,也免去了安装各种客户端的麻烦,同时搭建所用的软件也是历史悠久的非常稳定。
吐槽:如果问为什么这么好的方式却很少人用,答案可能是因为它需要较多的¥money,而且可能需要一张双币/多币种信用卡来购买这些东西:一个虚拟服务 器 vps,一个域名,一个 SSL 证书。vps 我比较推荐 linode,并不是因为你戳一下这个链接并成功购买后能返回一点零钱给我,而是 linode 相当厚道,它会跟随主流免费为你升级 CPU、内存、硬盘、带宽等等。域名和 SSL 证书大家可以参考我的前一篇《如何购买廉价 SSL 证书》。全部扔上购物车一年大概 $150 以上,捉襟见肘的可以考虑多人合购。
好了说回正题,用于实现 https proxy 的服务端软件很多,可以用老掉牙但很稳定的 squid,也可以随便用一个轻量级的 http proxy 程序搭配老掉牙的 stunnel,或者试试新秀 node-spdyproxy 也可以。
下面介绍一下比较简单的方案:轻量级 http proxy 程序 tinyproxy + stunnel 。
1、安装 tinyproxy 和 stunnel
首先使用各个 Linux 发行版的包管理器安装 tinyproxy 和 stunnel,比如:
$ sudo yum install tinyproxy stunnel // 对于 centos linux

$ sudo pacman -S tinyproxy stunnel // 对于 arch linux

安装完成后顺便设置它们随开机启动(可选)。
2、设置 stunnel
把你证书私钥和购买的证书扔到 /etc/stunnel 里,然后编辑文件 stunnel.conf,先指定私钥和证书文件名:
cert = /etc/stunnel/mycert.pem
key = /etc/stunnel/mykey.pem
需要注意的是从证书服务商购买回来的证书通常是几个小文件,大概有是:一个你的域名证书,一个证书链证书,一个root证书。把它们用文本编辑器打开,然后按照上述的顺序复制粘贴成一个文件,这个文件就是上面 ”cert=“ 这行所需的文件。
然后指定端口转换,比如将端口 443 (https 的默认端口)绑定并转换到 tinyproxy 的默认端口 8888:
[https]
accept = 443 c
其中 https 这个一项绑定的名称,可以随便起,accept 表示本机监听的端口,connect 表示转换到哪里。完整的意思就是为 127.0.0.1:8888 添加 SSL 加密层,然后通过 443 端口对外服务。

3、客户端设置
目前默认支持 https/spdy 代理的只有 google chrome 浏览器(其他浏览器需要在客户端运行 stunnel 把 https 翻译为 http 才能使用)。而且很诡异的是 chrome 没有自己独立设置 proxy 的地方,使用系统全局的那个 https 设置是不行的(因为系统那个 https 代理指的是当你访问 https 的网站时所走的 http 代理通道,跟我们这篇说的 https proxy 是两码事),所以你还得在 chrome 浏览器里安装插件  TunnelSwitch,然后在这个插件里设置 https 代理为:“你的网站域名:443”,这样所有工作都完成可以直接上网了。
4、一个给爱折腾的人的省钱方案
如果想节省购买 SSL 证书的花费,那么自己生成一个“自签名”的证书也是可以的,不过如果你的 proxy 想共享给其他人使用的话,要慎重考虑这种方式,因为它会让不爱折腾的人觉得很折腾。
用下面命令即可生成一个自签名证书:
openssl genrsa -out key.pem 1024
openssl req -new -key key.pem -subj “/CN=localhost” -out req.pem
openssl x509 -req -days 365 -in req.pem -signkey key.pem -out cert.pem
注意要将上面的 localhost 更改为你的域名,最终有用的分别是私钥文件 key.pem 和证书文件 cert.pem,把这两个文件替换上面第二步所提到的位置即可。
然后在客户端需要导入这个 cert.pem 才能顺利使用你所搭建的 https proxy 服务。各个操作系统的导入证书方法都不太相同。
在 linux 里比较麻烦,需要用 libnss3 工具 certutil 来完成,命令如下:
$ certutil -d “sql:$HOME/.pki/nssdb” -A -n dummy -i cert.pem -t C
在 mac osx 里使用 keychain 工具,把证书拖进”证书“一栏里。
在 windows 里双击证书文件,在选择“导入到位置”那一步选择”根信任“。
然后重启你的 chrome 浏览器就可以了。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

跳至工具栏