我对https的理解
1. 为啥需要 https
没有https的话,数据包在管道里面传输的时候就是明文的,这样只要一抓包就能知道你的数据了。
https 比 http 传输的时候(ps:注意是传输,即数据在管道里面的时候) ,多了一层加密,这样敏感数据就不是明文了。
ps:平时我们用的浏览器F12调试模式,还是可以看到接口的明文数据的,https解决的传输过程加密,Server-Client两端数据的加密的话得业务自行实现了。
2. https加密
网络世界是一片黑森林,谁也不能相信。
https为了能在传输的时候加密,加密就需要密钥,密钥不能明文传输,否则被坏人搞走了🔑,数据就能被盗了。
加密分为对称加密与非对称加密,区别如下:
| 指标 | 对称加密 | 非对称加密 |
|---|---|---|
| 密钥数量 | 单一密钥(共享密钥) | 一对密钥(公钥 + 私钥) |
| 计算速度 | 极快(适合大数据) | 慢(比对称加密慢 100-1000 倍) |
| 资源消耗 | 低 | 高(需复杂数学运算) |
| 适用场景 | 加密大量数据(如文件、通信流) | 加密小数据(如密钥分发、数字签名) |
https在设计的时候了,是先用非对称加密交换对称加密的密钥,然后用对称加密进行数据传输。兼顾了安全与性能。
其步骤如下:
这边还是会出现“公钥替换攻击”:
A---------------A公钥-------------》坏人 ----------坏人公钥----------》B
A《-------坏人私钥(A公钥加密)------坏人《----B密钥(坏人公钥加密)---- B
A用的是坏人的密钥加密传输数据,坏人就很轻松的解密数据了。
解决的方法就是再引入一层。引入了证书跟证书颁发机构(CA)。证书颁发机构(CA)是一个受信任的第三方,它负责为服务器颁发证书,并验证服务器身份的真实性。
3. 证书的工作原理
浏览器和操作系统通常会预先安装一些受信任的根证书,只有CA签发的证书才会被认为是有效的。
4. 中间人攻击与防范
因为证书是可信 CA 用自己私钥加密的,只有通过它才能解密。
如果中间件伪造证书,那么会出现非可信 CA。
因此,https协议的安全性依赖于CA的信任链和浏览器对根证书的信任。
5. https握手过程中,客户端如何验证证书的合法性?
客户端在进行HTTPS握手时,首先会从服务器获取其SSL证书。然后,客户端会使用其信任的CA根证书来验证该证书的签名是否合法。如果签名有效且证书未过期,客户端就会认为该证书合法,进而获取服务器的公钥用于加密后续的通信。
如果证书无效或者无法验证签名,客户端会中断连接并发出警告。这一过程的安全性主要依赖于证书的签名和CA的公钥链。