PS:本文适合对 HTTPS 已经有一定了解的人阅读。
前言
这篇文章我准备了很久,反复修改了很多次,仍不觉得满意,原因是:
- 网上虽有很多 HTTPS 相关的资料,但是质量参差不齐,而且有些地方的理解还不一致,我不知道哪个是对的。
- 对于 HTTPS,我很难在实践中应用它,因此,也没法从实践中确认我所理解的就是对的。
下面是我参考的资料,基本代表了我学习 HTTPS 的一个思路顺序:
- 关于互联网流量劫持分析及可选的解决方案, By xrzs
- 密码学笔记, By 阮一峰
- 对称加密算法 VS 非对称加密算法, By loveyoung
- 密码技术系列 Part 1 - 对称加密, By BigNerdCoding
- 如何用通俗易懂的话来解释非对称加密, By ThreatHunter
- XOR 加密简介, By 阮一峰
- RSA 算法原理(一), By 阮一峰
- RSA 算法原理(二), By 阮一峰
- 数字签名是什么?, By 阮一峰
- 看完还不懂 HTTPS 我直播吃翔, By winwill2012 🌟 🌟 🌟
- 关于 HTTPS,你需要知道的全部, By rushjs
- 深入 HTTPS 系列一(HTTP&HTTPS), By muice
- HTTPS 为什么安全 &分析 HTTPS 连接建立全过程, By kaitoulee
- SSL/TLS 协议运行机制的概述, By 阮一峰
- 浅谈 Charles 抓取 HTTPS 原理, By rushjs
- Nodejs 创建 HTTPS 服务器, By 张丹
既然网上的文章已经很多,我就不赘述了。凭自己的理解,我画了几张 HTTPS 的图,以求能加深记忆,最后的例子是解释 Charles 捕获 HTTPS 的原理。
图解
误区
我在学习 HTTPS 的时候,发现有几个地方特别容易掉坑里。
- 要想学习 HTTPS,首先应该学习基本的密码学知识,要理解对称加密和非对称加密的数学原理和特性,否则当看到密钥、私钥、公钥等等概念的时候很容易混乱。
- “公钥加密,私钥解密”,这句话是没错,但只说对了一半。公钥和私钥的区分不是以谁加密、谁解密来区分的,是以谁公开、谁不公开为区分的。另外,公钥和私钥,都可以用来加密和解密,也就是说,同一对钥匙,公钥加密只能私钥解密,私钥加密只能公钥解密。那为什么我们平常不说 “私钥加密” 呢?因为公钥是公开的呀!人手一份公钥,私钥加密不跟没加密一个样吗?因此,在实践中,基本不用私钥进行加密,私钥的用途一般是签名。
- 证书和证书中心。人们常说:“要想进行 HTTPS 通信,就要安装证书”。这句话未免说得太笼统,我觉得,应该刻意地区分开证书和证书中心,下面以 Charles 为例讲讲。
-------------- 完 --------------