前置知识
CA证书: CA证书通常是由受信任的证书颁发机构(如Let’s Encrypt、DigiCert、GlobalSign等)签发的。根CA证书会被预安装在大部分浏览器和操作系统中,确保证书链的完整性和信任。
对称加密:加密和解密用的是同一个“钥匙”。也就是说,加密方和解密方必须用相同的密钥进行操作。这就像你有一个锁和钥匙,只有拿到钥匙的人才能打开锁。缺点是密钥必须安全传输,否则就不安全。
非对称加密:加密和解密用的是一对不同的钥匙,通常是公钥和私钥。公钥用来加密,私钥用来解密。加密方可以用公钥加密数据,解密方用私钥解密数据。即使公钥公开了,只有持有私钥的人才能解密数据,保证了通信的安全。
交换秘钥
既然要加密,肯定要有秘钥,那么如何保证秘钥交换的过程中不被窃取就成为了重中之重.否则别人窃取你的秘钥随便就可以解密你的数据(中间人攻击).但非对称加密效率没有对称加密效率高.
HTTPS 采用的是对称加密和非对称加密结合的「混合加密」方式:
- 在通信建立前采用非对称加密的方式交换「会话秘钥」,后续就不再使用非对称加密。
- 在通信过程中全部使用对称加密的「会话秘钥」的方式加密明文数据。
第零步
服务端的公钥会被CA机构的私钥加密,生成一个数字证书,计算机的操作系统已经保存了大多数可信CA机构的公钥,贴张图
第一步
- 客户端向服务器发送一个包含以下内容的 Client Hello 消息:
-
支持的 TLS版本 和 加密套件(包括算法,比如 RSA、ECDHE、Diffie-Hellman 等)。
-
客户端生成的 随机数A(client random)。
- 服务器收到 Client Hello 后,做出回应:Hello(Server Hello)
-
选择一种双方都支持的 加密套件 和 TLS版本。
-
生成一个 服务器随机数B(server random)。
-
服务器发送自己的 证书,基本上都会选择 非对称加密,这时服务器的证书里包含了自己的 公钥
- 客户端收到 Server Hello
用保存在操作系统中CA机构的公钥解密这个证书,拿到服务器的公钥,使用加密套件,随机数A,随机数B,再配合加密套件中秘钥交换算法ECDHE(因为它更安全),就可以把客户端准备的用于对称加密秘钥传递给服务器.
客户端会返回一个用秘钥加密的Finished.
- 服务器收到 Finished
服务器也会用对称秘钥加密一个Finished返回给客户端
-
握手完成
-
以上其实就是TSL的三次捂手过程
第二步
开始双方的数据通信
总结:
也许你看到这还是不太懂为什么这样就可以保证对称秘钥的安全,建议你看看ECDHE的加密逻辑,该文章中描述很清楚
另外你可能会问,如果CA机构的私钥被窃取了怎么办?
用百度举例,他的证书并不是CA机构直接颁发的,而是通过各种中间人认证的,通过一层一层的信任就可以,那为什么要搞这么多层呢?
这是为了确保根证书的绝对安全性,将根证书隔离地越严格越好,不然根证书如果失守了,那么整个信任链都会有问题。