# https的中间人攻击和防范
这里的中间人场景主要是Windows平台下的C/S架构劫持,技术指的是SSL劫持攻击,即SSL欺骗,剥离攻击暂不涉及。整体原理是伪造证书,既充当请求方的server角色,又充当真正server的请求方。以此来获取和篡改通信的明文报文数据。

## 整体流程
1. 使用openSSL制作证书
2. 编写代理程序
3. 根证书添加到可信任发布机构
4. 设置系统代理
## 证书制作
首先装个openSSL,安装包下载地址:[http://slproweb.com/products/Win32OpenSSL.html](http://slproweb.com/products/Win32OpenSSL.html)
1. 生成CA证书(root ca证书)
生成CA私钥(.key)-->生成CA证书请求(.csr)-->自签名得到根证书(.crt)(CA给自已颁发的证书)
2. 用上一步生成的根证书签发应用证书
生成私钥(.key)-->生成证书请求(.csr)-->用CA根证书签名得到证书(.crt)
到这里,证书就已经准备完成,在Windows平台下把刚用到的ca证书添加到可信任的证书颁发机构,生成的应用证书在下一步代理server中使用。
## 代理server
- 首先这个程序角色是一个https的server,加载上一步的应用证书,搭建https 本地server,对需要劫持的接口作响应,给请求方返回符合协议格式的假数据;
- 其次,这个程序角色也是个假的请求方,向真实的服务器请求劫持的接口,获得真正的服务器返回数据;
- 代理程序完成之后,需要设置端口转发,好让请求方先跟我们的代理通信。这里简单的方法可以是改hosts文件,但是改hosts收到权限等诸多限制,正统一些的方法是设置系统代理,这就需要代理程序只拦截我们感兴趣的报文,对于其它的通信则进行单纯的转发。
## 防范思路
以上是https中间人攻击大致实现过程,其根本原理是利用https建立连接的特性,自签证书实现伪造server的目的。针对这种方式,证书的双向认证会很好地解决这一风险。客户端向服务端请求证书时做判断,服务器也对请求方的证书做校验,防止中间人伪造证书的攻击。
0 Comments latest
No comments.