以前写过一篇SSL Proxy的小的分析,在最近一次讨论中发现我还是了解的不够细致,这里描述的细致一些。
首先是定义一下应用场景:
SSL Client<--------------------------->SSL Server
首先是标准的SSL Client和Server进行通信。
SSL Client<-------------->MITM<------------->SSL Server
需求是:在其间加入中间人,劫持会话,生成两个SSL会话,从而可以获取明文数据,同时符合SSL标准,同时不用Client明确关注到中间人。
业界有两种实现:
1.SSL Forward Prxoy -- 正向代理
即代理Client。中间人生成自签名证书,Client要明确相信中间人的证书,这样中间人就不必将Server的证书发送给Client。
2.SSL Reverse Proxy -- 反向代理
即代理Server,要求Server的证书必须明确的配置在中间人上,这样中间人可以完全承担Server的加解密的功能。
从技术角度讲,潜在的还可以将Client的证书配置到中间人上,但是这是无法操作的。
即使是业界的实现也有一些局限:
1.两种实现所共有的局限是:Server不能对于Client进行身份验证,因为Client的私钥无法获取。
2.正向代理的另一个局限是,由于中间人是自签名证书,如果Client实现一定要验证Server证书合法性,则无法实现会话的劫持。