HTTPS 加密原理简介
https 相关的资料已经非常多,本文尽量以最简洁的图文介绍大致原理,不涉及细节。本文开始前,读者需要先了解对称加密、非对称加密、hash 算法相关知识。
HTTPS 如何保证传输数据安全?
- 服务器将公钥(非对称加密)发送给客户端
- 客户端生成随机密钥(对称加密),通过公钥加密后发送给服务端,这样双方都拥有了对称加密的密钥
- 后续传输的数据是通过密钥加密的密文(所以传输的数据是安全的)
http 协议传输的数据相当于裸奔,数据从服务器到浏览器,经过的任意一个网络节点(代理、wifi、运营商等等)都可以随意篡改用户数据。
如何确保服务器公钥没有被篡改?
从上一节可以看到,第一步服务器下发公钥给客户端是明文的,所以确保公钥未被篡改至关重要。
上一节第一步,服务器下发的证书中主要包含三个元素:服务器公钥、证书颁发机构信息、颁发机构签名。
浏览器可以根据颁发机构信息找到其对应的公钥,然后三步即可验证服务器公钥是否安全:
- 通过颁发机构公钥解密签名,得到服务器公钥的 hash 值
- hash 服务器公钥,得到其公钥的 hash 值
- 对比前两步得到的公钥 hash 值是否相同,如果相同则说明公钥未被篡改
这里我们可以总结得到:证书是否可信(或者说公钥是否安全),需要通过证书颁发者(的公钥)来验证。
浏览器如何确保颁发机构是否可信?
从第二节可以看到,验证服务器公钥安全性的关键在于颁发机构是否可信。
证书颁发机构(组织)是一个树状结构,如图:
所以说这个问题类似第二个问题,验证颁发机构是否可信(公钥是否安全),需要通过上层的颁发机构来验证。
采用第二步的方式进行递归验证,即可确保所有证书都是安全的。
递归的终点即根证书,如何验证根证书是否可信呢?
答案是浏览器内置的,无条件信任。(浏览器还会信任操作系统的证书)
如何篡改 HTTPS 协议传输的数据?
https 经过这么严密的验证过程,还能篡改数据么? 可以的。
从第三步可以看到,只要浏览器信任了假根证书,前面的验证步骤都不安全了。
代理工具的根证书被信任后就可以生成假证书返回给浏览器,而不会被浏览器发现。
所以,所有代理工具都必须用户信任其根证书,才能够查看篡改 https 请求的内容。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

上一篇: cljs 中普通与瞬态数据结构性能对比
下一篇: 谈谈自己对于 AOP 的了解
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论