Stunnel ( universal SSL tunnel, http://www.stunnel.org/ ) 是一个可以为不支持 SSL 的网络应用程序加上 SSL 功能的小软件, 它即可以作为一个 SSL 网关, 来保护原本没有 SSL 功能的服务器(如 smtp, pop 等服务器), 也可以作为一个 SSL 代理, 使不支持 SSL 访问的网络客户端软件能够访问以 SSL 加密的方式提供的服务; 本文关注的是后一种功能.
安装 stunnel
下面介绍如何从源码开始安装 stunnel, 运行环境为 Ubuntu 7.04.
- 2)安装过程:在命令行下执行下列命令即可:
- ./configure
- make
- sudo make install
- 如果在 configure 中报告 "checking for SSL directory... Not found", 那么需要安装 libssl-dev, 命令如下:
- sudo apt-get install libssl-dev
- 3)在 make install 过程中会要求输入一些信息建立 /usr/local/etc/stunnel/stunnel.pem PEM 证书文件;
- 4)安装完毕之后执行 "stunnel" 或者 "stunnel -help" 可以看到帮助信息, 说明 stunnel 已经被成功安装;
- 说明: 如果运行时 shell 报告找不到命令, 有可能是 /usr/local/sbin 目录不在 PATH 中;
配置 stunnel 作为 SSL 代理, 且支持客户端证书
本文配置 stunnel 作为 SSL 代理的目的, 主要是为了解决某些通过 HTTP 协议访问网络资源的客户端程序, 对 SSL(尤其是对需要客户端电子证书的 SSL 方式)的支持不佳的问题, 那么在必须通过这些程序访问 SSL 网络资源时就需要使用 SSL 代理了.
- 1)现在需要使用 openssl 将带有密码的客户端证书文件(PFX/P12) 转化为 PEM 格式的证书:
- openssl pkcs12 -in XXX.p12 -out svn-stunnel.pem -nodes
- 2)接着我们编写一个 stunnel 的配置文件 svn-stunnel.conf:
- 3)然后就可以直接运行:
- stunnel svn-stunnel.conf
- 此时可能出现警告信息: "Wrong permissions on ...", 这种情况似乎不影响使用, 如果想消除这条信息, 可以执行:
- chmod 600 svn-stunnel.conf
- (不过有时候似乎没有效果, 不知道是不是与当前用户不是 root 有关)
- 4)接着, 用 http 访问 localhost 的 "accept" 端口, 就可以正常访问原本需要使用证书验证的 HTTPS 网址了;
- 5)最后, 将相关命令写入 /etc/rc.local 中, 让 stunnel 开机启动, 即可;
参考资料
- 使用 Stunnel 加密 - 如何在 SSL 内加密任意 TCP 连接
- DonewsBlog-大风: stunnel和ssh tunnel
- dev2dev: 使用带密钥库的PFX和PEM证书格式
- 中国Java开发网: 如何获取服务商Https的内容
END
评论