超级详细的 https 中间人攻击流程。
发布时间:2024年01月05日
- 客户端发送 https 请求
- 中间人截获 https 请求,然后在转发给服务端
- 中间人可以是抓包工具
- 中间人可以通过伪造证书的方式截获请求
- 服务端接收到请求【看起来是客户端发的,实际上已经经过中间人转发了】
- 服务端以为是一个安全的请求,向客户端发送数字证书,假设为 DC_A,证书中包含公钥和CA等信息。
- 作为 https 请求的服务端一定是购买了安全的证书,否则会提示不是安全的链接? ?
- 数字证书里面包含是公钥 PK_A,服务端私密保存数字证书对应的私钥SK_A
- 中间人截获数字证书?DC_A,使用 OpenSSL 提取其中的公钥 PK_A。然后把自己的数字证书 DC_B 发送给客户端
- 中间人有自己的数字证书,其中数字证书包含了自己的公钥 PK_B?,中间人私密保存自己的私钥 SK_B。
- 客户端接收到数字证书?DC_B【这个证书看起来是服务端发的,实际上是中间人的】,客户端会验证数字证书是否有效,步骤如下:
- 证书链验证:客户端检查证书是否由受信任的根证书颁发机构(CA)签发,通过信任链验证证书的有效性。
- 客户端的操作系统中内置了根证书,根证书通常用于验证 CA 。
- 根证书验证 CA 的流程是(信任链):信任设备的根证书 (操作系统内置)=> 信任根证书签发它的 CA => CA 信任颁发它的中间 CA => 以此类推,最终信任根证书签发的所有数字证书
- 所以,验证数字证书的本质是验证 CA
- 所以我们在实现中间人攻击之前,需要在我们的电脑上安装一个新的根证书,这个根证书就是用来验证中间人的数字证书的。【这个根证书和中间人证书是一个CA 签发的】
- 有效期验证:检查证书是否在有效期内
- 吊销状态检查:检查证书是否被吊销
- 客户端验证证书 DC_B?有效后,提取公钥 PK_B,并用公钥 PK_B 加密一个数据当作后续对称加密的私钥,这个数据通常是随机字符串使用哈希算法得到的哈希值,这里假设是 hash_B。
- 中间人拦截请求,得到使用自己的公钥 PK_B 加密的哈希值?hash_B,用自己的私钥 SK_B 解密,得到真实的哈希值 hash_B,这个真实的哈希值后续用来解密所有拦截的客户端的请求。
- 中间人再生成一个假的随机字符串 hash_A,用服务端的公钥 PK_A 加密,发给服务端。
- 服务端接收到请求,用自己的私钥 SK_A 解密得到哈希值 hash_A,他以为是客户端发的,实际是中间人伪造的;后续客户端用这个哈希值?hash_A?加密数据,和客户端进行后续的对称加密会话。
- 中间人拦截服务端的返回,用第8步假的哈希值 hash_A?就可以解密(因为是对称加密),然后再用?hash_B 加密,发给客户端
- 客户端接收到中间人用?hash_B 加密的数据,再用 hash_B 解密,就得到了服务端发送的数据。
更多关于中间人攻击的内容,可以参考这篇文章,非常详细!
文章来源:https://blog.csdn.net/qq_17335549/article/details/135403845
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:chenni525@qq.com进行投诉反馈,一经查实,立即删除!