面试必备-计算机网络-HTTPS

加密过程
数字证书由两部分组成
- 信息摘要 = hash(服务器公钥+站点信息)
- 数字签名 = CA私钥加密(信息摘要)
整体流程如下图所示

- 主要是对比 hash(Clinet.数字证书.信息摘要) = CA公钥解密(Server.数字证书.数字签名)
- 中间人可以拿到数字证书,但是无法得到CA私钥去加密自己伪造的公钥

另一种解释版本


步骤解释
1.浏览器给服务端发送SSL支持的版本,非对称加密算法,随机数1
2.服务器给浏览器协商好SSL版本,携带证书,随机数2
3.浏览器认证证书
4.,认证成功后浏览器发送随机数3,hash(第一步第二部的数据)
5,服务器验证hash数据,认证成功后将随机数123生成key,然后hash(之前的数据)=ZZ,把ZZ发送给浏览器
6.浏览器利用随机数123生成key,然后hash=ZZ ,对照服务器传过来的ZZ,如果一样就将随机数123生成key

其他问题
版本相关:
TLS 1.0 = SSL 3.1 TLS 1.1 = SSL 3.2 TLS 1.2 = SSL 3.3

每次回话都会建立SSL/TLS连接么
对于已经建立的SSL会话,使用session id为key(session id来自第一次请求的server hello中的session id字段),主密钥为value组成一对键值,保存在本地,服务器和客户端都保存一份。
当第二次握手时,客户端若想使用会话复用,则发起的client hello中session id会置上对应的值,服务器收到这个client hello,解析session id,查找本地是否有该session id,如果有,判断当前的加密套件和上个会话的加密套件是否一致,一致则允许使用会话复用,于是自己的server hello 中session id也置上和client hello中一样的值。然后计算对称秘钥,解析后续的操作。
如果服务器未查到客户端的session id指定的会话(可能是会话已经老化),则会重新握手,session id要么重新计算(和client hello中session id不一样),要么置成0,这两个方式都会告诉客户端这次会话不进行会话复用。
参考
抓包问题
charles抓包原理
类似于中间人攻击的中间人

高版本安卓如何抓包
在 Android 7.0(API 24)到 Android 8.1(API 27),默认不再信任用户添加的 CA 证书,所以也就不再信任 Charles 和 Fiddler 抓包工具的证书,所以抓取 HTTPS 包时才会失败。
在 Android 9.0(API 28)及更高版本上,不仅默认只系统预装的 CA 证书,还默认禁止所有明文通信(不允许 http 请求)
方法:
- root,伪装ca证书
- Xposed+JustTrustMe
参考:
- 浅谈HTTPS抓包原理,为什么Charles能够抓取HTTPS报文? - 知乎
- 周一到五忙着吹牛划水骗工资周六日抓紧时间发个伪高端技术文章
- Android 高版本 HTTPS 抓包解决方案!(建议收藏)-技术圈
- 看图学HTTPS
- 数字签名、数字证书与HTTPS是什么关系? - 知乎
- 谈谈 HTTPS
