Total Pageviews

Wednesday 26 March 2014

编译stunnel

Compile the software:

        ./configure
        make
        make install

   (see potential options for 'configure' at the end of this file)

3. Create stunnel configuration file (stunnel.conf).

4. Add stunnel invocation to your system's startup files.
   For SysV-compatible init you can use stunnel.init script.

     or

   Modify /etc/services and /etc/inetd.conf, restart inetd (inetd mode).

   See the manual for details.

5. There are a variety of compile-time options you may supply when
   running configure. Most commonly used are:

   --with-ssl=DIR
        where your SSL libraries and include files are installed

   --with-random=FILE
        read randomness from FILE for PRNG seeding

   --with-egd-socket=FILE
        location of Entropy Gathering Daemon socket, if running EGD
        (for example on a machine that lacks a /dev/urandom device)

   Use `./configure --help' to see all the options.
from https://github.com/copiousfreetime/stunnel/blob/master/INSTALL
The stunnel program is designed to work as an SSL encryption
     wrapper between remote client and local (inetd-startable) or
     remote servers. The goal is to facilitate SSL encryption and
     authentication for non-SSL-aware programs.
     stunnel can be used to add  SSL  functionality  to  commonly
     used  inetd  daemons  like  POP-2,  POP-3  and  IMAP servers
     without any changes in the programs' code.
from https://github.com/copiousfreetime/stunnel 
 -------------------

用stunnel+tinyproxy 搭建 https proxy服务器


用于实现https proxy的服务端软件很多,可以用老掉牙但很稳定的 squid,也可以随便用一个轻量级的http proxy程序(比如tinyproxy)搭配stunnel.
下面介绍一下比较简单的方案:轻量级的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
connect = 127.0.0.1:8888
其中 https 这个一项绑定的名称,可以随便起,accept 表示本机监听的端口,connect 表示转换到哪里。完整的意思就是为 127.0.0.1:8888 添加 SSL 加密层,然后通过 443 端口对外服务。

3、客户端设置

目前默认支持 https代理的只有chrome浏览器(其他浏览器需要在客户端运行 stunnel程序把 https 翻译为 http 才能使用)。而且很诡异的是 chrome 没有自己独立设置 proxy 的地方,使用系统全局的那个 https 设置是不行的(因为系统那个 https 代理指的是当你访问 https 的网站时所走的 http 代理通道,跟我们这篇说的 https proxy 是两码事),所以你还得在 chrome 浏览器里安装插件TunnelSwitch或switchyomega,然后在这个插件里设置 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 浏览器就可以了.