对称协议与非对称协议

1. 对称加密:一把钥匙开一把锁

对称(Symmetric)的意思是:加密解密使用的是同一把钥匙

  • 场景:你把日记锁进一个保险箱,你用一把蓝色的钥匙锁上。如果你的朋友想看日记,你必须把这把一模一样的蓝色钥匙寄给他。
  • 特点
    • 速度极快:就像转动一下钥匙一样简单,适合加密大量数据(如电影、文件)。
    • 核心矛盾“如何把钥匙安全地给对方?” 如果你在寄钥匙的过程中,钥匙被小偷偷走了,那保险箱就不再安全了。

2. 非对称加密:两把成对的钥匙

非对称(Asymmetric)的意思是:加密解密使用的是两把不同的钥匙。这两把钥匙是成对产生的,分别叫公钥(Public Key)私钥(Private Key)

其逻辑遵循一个特殊的数学原理:用公钥锁上的东西,只有对应的私钥能打开。

  • 场景
    1. 你向全世界分发无数把“只能锁、不能开”的挂锁(公钥)
    2. 任何人想给你寄信,就用你的挂锁把信封锁上。
    3. 这把锁一旦锁死,全世界只有你手里那把唯一的**钥匙(私钥)**能打开。
  • 特点
    1. 安全性极高:你不需要传输你的“私钥”,所以不存在钥匙被截获的问题。
    2. 速度较慢:数学计算非常复杂,不适合加密大文件。

3. 为什么叫“对称”与“非对称”?

我们可以看这个对比表:

维度 对称加密 (Symmetric) 非对称加密 (Asymmetric)
钥匙数量 只有 1 2 把(公钥和私钥)
对称性含义 过程是可逆对称的。加解密逻辑完全一样。 过程是单向非对称的。公钥加的锁,公钥自己都打不开。
典型算法 AES (目前最流行), DES RSA, ECC (椭圆曲线)

4. TLS 是如何结合这两者的?(混合加密)

既然对称加密快但传钥匙难,非对称加密安全但速度慢,TLS 就像个天才一样把它们结合了:

  1. 先用非对称加密(换钥匙):客户端用服务器的公钥,加密一把临时生成的“对称钥匙”发过去。
  2. 再用对称加密(传数据):一旦双方都拿到了这把“对称钥匙”,后面的所有聊天数据(网页内容、图片)全都改用对称加密

这就是为什么你在浏览器访问网站时,既能保证极高的安全性,速度又飞快。

简单总结:

  • 对称 = 双方共用一把钥匙,简单高效,但怕丢钥匙。
  • 非对称 = 你一把锁我一把钥匙,复杂安全,不怕截获。

你现在能理解为什么我们在配置服务器证书时,总是会看到 public_keyprivate_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 通信比作一次特工接头

  1. 握手阶段(你的理解)

    • 客户端:拿出一把空密码锁(公钥),把写有“暗号”的纸条锁在盒子里发给服务器。
    • 服务端:用唯一能开这把锁的钥匙(私钥)打开盒子,看到暗号。
    • 达成共识:现在双方都知道了暗号。
  2. 记录阶段

    • 双方:之后的对话全部用这个暗号进行加减码。

💡 职业排障小贴士

作为一名开发者,当你遇到 “TLS Handshake Failed” 时,通常只有两个原因:

  1. 非对称阶段出事:客户端不信任服务器的证书(CA 不对),或者服务器的 private_keypublic_key 不匹配。
  2. 协议不匹配:服务器只支持 TLS 1.3,而过时的客户端(比如旧版 Python 库)只支持 TLS 1.0。