对称协议与非对称协议
1. 对称加密:一把钥匙开一把锁
对称(Symmetric)的意思是:加密和解密使用的是同一把钥匙。
- 场景:你把日记锁进一个保险箱,你用一把蓝色的钥匙锁上。如果你的朋友想看日记,你必须把这把一模一样的蓝色钥匙寄给他。
- 特点:
- 速度极快:就像转动一下钥匙一样简单,适合加密大量数据(如电影、文件)。
- 核心矛盾:“如何把钥匙安全地给对方?” 如果你在寄钥匙的过程中,钥匙被小偷偷走了,那保险箱就不再安全了。
2. 非对称加密:两把成对的钥匙
非对称(Asymmetric)的意思是:加密和解密使用的是两把不同的钥匙。这两把钥匙是成对产生的,分别叫公钥(Public Key)和私钥(Private Key)。
其逻辑遵循一个特殊的数学原理:用公钥锁上的东西,只有对应的私钥能打开。
- 场景:
- 你向全世界分发无数把“只能锁、不能开”的挂锁(公钥)。
- 任何人想给你寄信,就用你的挂锁把信封锁上。
- 这把锁一旦锁死,全世界只有你手里那把唯一的**钥匙(私钥)**能打开。
- 特点:
- 安全性极高:你不需要传输你的“私钥”,所以不存在钥匙被截获的问题。
- 速度较慢:数学计算非常复杂,不适合加密大文件。
3. 为什么叫“对称”与“非对称”?
我们可以看这个对比表:
| 维度 | 对称加密 (Symmetric) | 非对称加密 (Asymmetric) |
|---|---|---|
| 钥匙数量 | 只有 1 把 | 有 2 把(公钥和私钥) |
| 对称性含义 | 过程是可逆对称的。加解密逻辑完全一样。 | 过程是单向非对称的。公钥加的锁,公钥自己都打不开。 |
| 典型算法 | AES (目前最流行), DES | RSA, ECC (椭圆曲线) |
4. TLS 是如何结合这两者的?(混合加密)
既然对称加密快但传钥匙难,非对称加密安全但速度慢,TLS 就像个天才一样把它们结合了:
- 先用非对称加密(换钥匙):客户端用服务器的公钥,加密一把临时生成的“对称钥匙”发过去。
- 再用对称加密(传数据):一旦双方都拿到了这把“对称钥匙”,后面的所有聊天数据(网页内容、图片)全都改用对称加密。
这就是为什么你在浏览器访问网站时,既能保证极高的安全性,速度又飞快。
简单总结:
- 对称 = 双方共用一把钥匙,简单高效,但怕丢钥匙。
- 非对称 = 你一把锁我一把钥匙,复杂安全,不怕截获。
你现在能理解为什么我们在配置服务器证书时,总是会看到 public_key 和 private_key 这两个文件了吗?
在tls握手阶段客户端使用服务器的public_key,使用非对称算法加密一个临时生成的对称的密匙,发送给服务器,服务器使用private_key解密
1. “RSA 密钥交换”模式
以上描述的这种过程(客户端直接加密密钥发给服务器)被称为 RSA 密钥交换。
- 优点:逻辑非常直觉,好理解。
- 缺点:它缺乏前向安全性(Forward Secrecy)。
- 想象一下:如果黑客现在把你们所有的加密流量都录制下来,等到一年后他偷到了服务器的
private_key,他就能解开当年那把“对称密钥”,从而破解你们所有的历史谈话。
- 想象一下:如果黑客现在把你们所有的加密流量都录制下来,等到一年后他偷到了服务器的
2. 现代 TLS(1.2/1.3)的进化:DHE/ECDHE
现在的主流配置(比如你之前在 Nginx 中配置的套件)更多使用 (EC)DHE 算法。
- 区别点:服务器的
private_key不再用来直接解密“对称密钥”,而是用来签名。 - 逻辑:双方通过一套复杂的数学计算(迪菲-赫尔曼密钥交换)各自算出一把对称密钥。服务器的私钥只负责证明“这个计算过程确实是我发起的”,而不是用来直接开锁。
- 结果:即使未来私钥丢了,黑客也无法破解过去的流量。
总结你的模型
如果你把 TLS 通信比作一次特工接头:
握手阶段(你的理解):
- 客户端:拿出一把空密码锁(公钥),把写有“暗号”的纸条锁在盒子里发给服务器。
- 服务端:用唯一能开这把锁的钥匙(私钥)打开盒子,看到暗号。
- 达成共识:现在双方都知道了暗号。
记录阶段:
- 双方:之后的对话全部用这个暗号进行加减码。
💡 职业排障小贴士
作为一名开发者,当你遇到 “TLS Handshake Failed” 时,通常只有两个原因:
- 非对称阶段出事:客户端不信任服务器的证书(CA 不对),或者服务器的
private_key和public_key不匹配。 - 协议不匹配:服务器只支持 TLS 1.3,而过时的客户端(比如旧版 Python 库)只支持 TLS 1.0。