使用 TLS/SSL 加密你的 HTTP 代理

标签: Linux | 发表时间:2012-10-25 19:18 | 作者:依云
出处:http://lilydjwg.is-programmer.com/

HTTP 代理是明文的,这导致实际访问的 URL 可以被他人监测到。即使使用 HTTPS 协议,经过 HTTP 代理时会发送 CONNECT请求,告诉代理要连续到远程主机的指定端口。于是,访问的目标域名暴露了。

有没有办法将传输内容加密呢?比如像 HTTPS 那样,使用 TLS 协议连接到代理服务器,然后再进行 HTTP 请求。很遗憾的是,我在 ziproxy 的配置里没有发现这样的选项。在 shlug 邮件列表里询问后,Shell Xu 提到了 stunnel 这个工具。以前我试过用它把 HTTP 的网站转成 HTTPS 的,但是网站后端程序无法知晓用户实际上使用的是 HTTPS,有些郁闷,就没管它了。

这次再次请出 stunnel,在代理服务器上执行如下命令:

sudo stunnel -d 0.0.0.0:8081 -r localhost:8080 -p /etc/stunnel/stunnel.pem

这样,所有到服务器的 8081 端口的请求,都会经过 TLS 解密后传递给 8080 端口。同时响应的数据也会被加密后再返回请求方。

接下来的问题是,浏览器无法直接使用这种代理。实际上除了拿 openssl 命令手动连接外,我不知道任何程序能够使用这种代理。那好,本地弄个反过来加密/解密的服务好了。还是使用 stunnel。不过出了点意外:Arch Linux 的 stunnel 是第四版,不再用命令行参数,转而使用配置文件了。于是参考这篇 Upgrading to stunnel 4,写了份 stunnel4 的配置文件:

compression = zlib
foreground = yes
output = /dev/stdout
client = yes
pid = /tmp/stunnel.pid
# or will output to syslog :-(
output = /tmp/stunnel.log

[name]
accept = 8082
connect = server.com:8081

这样在本地 8082 端口监听,把所有请求加密后转发到 server.com 的 8081 端口。同时响应的数据会被解密后再返回。

现在,所有与代理服务器传输的数据都被加密了,不怕被偷窥啦。

后记:

后来,我发现其实代理服务器和我本机都装了两个版本的 stunnel,只是名字中不带版本号的一个是第三版而另一个是第四版而已……

再后来,我猛然想起神器 socat——这家伙是支持 OpenSSL 的!比如客户端这边像下边这样子就可以了:

$ socat tcp-listen:8082,fork openssl:server.com:8081,verify=0

socat 真是神器啊,cat、netcat、rinetd、stunnel 的功能都覆盖了!

这样使用的时候,每次来新请求时,socat 会 fork 一个新进程来处理。有点浪费资源。不过略微查看了下,stunnel 似乎也一样。

相关 [tls ssl 加密] 推荐:

使用 TLS/SSL 加密你的 HTTP 代理

- - 依云's Blog
HTTP 代理是明文的,这导致实际访问的 URL 可以被他人监测到. 即使使用 HTTPS 协议,经过 HTTP 代理时会发送 CONNECT请求,告诉代理要连续到远程主机的指定端口. 比如像 HTTPS 那样,使用 TLS 协议连接到代理服务器,然后再进行 HTTP 请求. 很遗憾的是,我在 ziproxy 的配置里没有发现这样的选项.

图解SSL/TLS协议

- - 阮一峰的网络日志
本周, CloudFlare宣布,开始提供Keyless服务,即你把网站放到它们的CDN上,不用提供自己的私钥,也能使用SSL加密链接. 我看了CloudFlare的说明( 这里和 这里),突然意识到这是绝好的例子,可以用来说明SSL/TLS协议的运行机制. 下面,我就用这些图片作为例子,配合我半年前写的 《SSL/TLS协议运行机制的概述》,来解释SSL协议.

聊聊HTTPS和SSL/TLS协议

- - 外刊IT评论
要说清楚 HTTPS 协议的实现原理,至少需要如下几个背景知识. 大致了解几个基本术语(HTTPS、SSL、TLS)的含义. 大致了解 HTTP 和 TCP 的关系(尤其是“短连接”VS“长连接”). 大致了解加密算法的概念(尤其是“对称加密与非对称加密”的区别). 考虑到很多技术菜鸟可能不了解上述背景,俺先用最简短的文字描述一下.

SSL与TLS的区别以及介绍

- - 博客园_知识库
  SSL:(Secure Socket Layer,安全套接字层),位于可靠的面向连接的网络层协议和应用层协议之间的一种协议层. SSL通过互相认证、使用数字签名确保完整性、使用加密确保私密性,以实现客户端和服务器之间的安全通讯. 该协议由两层组成:SSL记录协议和SSL握手协议.   TLS:(Transport Layer Security,传输层安全协议),用于两个应用程序之间提供保密性和数据完整性.

Google将发布补丁阻止SSL/TLS攻击

- SotongDJ - Solidot
51开源社区 写道 "研究者最近发现了一个存在于TLS 1.0(目前使用最广泛的安全加密协议)的重大漏洞. 利用该漏洞,黑客可以悄悄解密客户端和服务器端之间通过HTTPS传输的数据. 本周在布宜诺斯艾利斯举行的黑客技术研讨会上,Thai Duong和Juliano Rizzo将展示一个利用此漏洞的方式,使用称为BEAST的脚本,配合一个网络连接嗅探器即可在30分钟内解密一个PayPal的用户Cookie.

研究人员将演示攻击SSL/TLS

- Tim - Solidot
9月21日布宜诺斯艾利斯举行的Ekoparty安全会议上,安全研究人员Thai Duong和Juliano Rizzo将演示针对SSL/TLS的概念验证攻击. 研究人员在SSL/TLS协议中发现了严重弱点,能让黑客悄悄破译Web服务器和终端用户浏览器之间传输的加密数据. 弱点主要影响TLS协议1.0版及SSL所有版本,TLS 1.1/1.2未受影响.

Google将发布补丁阻止SSL/TLS攻击

- 洞箫 - cnBeta.COM
实际上对付BEAST对SSL攻击的工作从今年 5、6 月份就展开了. BEAST 的两位研究人员也没在本周五正式发表前透露太多细节,不过 Google 显然不打算冒任何风险. BEAST 利用选择明文恢复 (chosen plaintext-recovery) 攻击 SSL 和 TLS 早期版本的 AES 加密,其中被称为加密块连锁 (cypher block chaining) 的加密方式使用之前的加密块对下一个块进行加密.

研究人员将演示攻击SSL/TLS

- 2楼水饺 - cnBeta.COM
9月21日布宜诺斯艾利斯举行的Ekoparty安全会议上,安全研究人员Thai Duong和Juliano Rizzo将演示针对SSL/TLS的概念验证攻击. 研究人员在SSL/TLS协议中发现了严重弱点,能让黑客悄悄破译Web服务器和终端用户浏览器之间传输的加密数据.

数字证书, 数字签名, SSL(TLS) , SASL .

- - CSDN博客Web前端推荐文章
因为项目中要用到TLS + SASL 来做安全认证层. 所以看了一些网上的资料, 这里做一个总结..  数字证书:  http://www.cnblogs.com/hyddd/archive/2009/01/07/1371292.html.  数字证书和SSL:  http://www.2cto.com/Article/201203/121534.html.

SSL/TLS协议运行机制的概述

- - 阮一峰的网络日志
互联网的通信安全,建立在SSL/TLS协议之上. 本文简要介绍SSL/TLS协议的运行机制. 文章的重点是设计思想和运行过程,不涉及具体的实现细节. 如果想了解这方面的内容,请参阅 RFC文档. 不使用SSL/TLS的HTTP通信,就是不加密的通信. 所有信息明文传播,带来了三大风险. 窃听风险(eavesdropping):第三方可以获知通信内容.