返回文章列表

文章

关于SSL、TLS、HTTPS

目录
  1. 一句话关系: HTTPS = HTTP over TLS (现在没人用 SSL 了,但名称习惯上还叫 SSL 证书,实际上是 TLS 证书)。
  2. 二、“随机密钥、对称密钥、实际密钥” 到底是什么?它们是同一个东西的不同称呼
  3. 因此,整个过程其实只涉及一次“生成” + 一次“安全传递”
  4. 三、为什么这个设计看起来这么复杂?不能更简单吗?
  5. 1. 为什么不全用非对称加密(公钥/私钥)一条路走到底?
  6. 2. 为什么不固定使用一个对称密钥?每次都要随机生成?
  7. 3. 为什么不直接在代码里写死对称密钥,然后明文传输?
  8. 4. 为什么还要有 CA 证书?
  9. 四、一图总结整个“复杂”的协作原理
## 一、SSL、TLS、HTTPS 三概念再梳理 图片里的描述已经很清楚,我把它提炼成一张关系图:
概念本质状态
SSL网景公司开发的老旧加密协议已被淘汰,有严重漏洞
TLSIETF 在 SSL 基础上改进并更名,是目前的标准正在使用 (TLS 1.2/1.3)
HTTPSHTTP + SSL/TLS,把 HTTP 通信装进 TLS 加密隧道就是我们日常看到的https网站

一句话关系: HTTPS = HTTP over TLS (现在没人用 SSL 了,但名称习惯上还叫 SSL 证书,实际上是 TLS 证书)。#

二、“随机密钥、对称密钥、实际密钥” 到底是什么?它们是同一个东西的不同称呼#

图片里的这段原话可能会让人误以为存在三个不同的密钥:

“客户端会生成一个随机的密钥(Random Key)……这个随机密钥就被称为‘实际密钥’(对称密钥)。” 这里其实是在描述同一个密钥在生命周期里的三个名字,而不是三把不同的密钥。

  1. 随机密钥
    • 指的是它怎么来的:每次握手时,客户端临时、随机生成的一段数据。
    • 目的:保证每个会话的密钥都是全新、不可预测的,防止重放攻击。
  2. 对称密钥
    • 指的是它加密算法的类型:这把密钥将在后续通信中用于对称加密(比如 AES),加密解密用同一把钥匙。
    • 之所以用对称加密,是因为它比非对称加密快得多,适合大量数据加密。
  3. 实际密钥
    • 指的是它最终用来干什么:它就是双方真正用来加密网页内容、图片、密码等实际数据的密钥。
    • 也就是“后面实际数据传输时用的那把对称密钥”。

因此,整个过程其实只涉及一次“生成” + 一次“安全传递”#

  • 客户端随机生成一把未来的对称密钥(随机密钥阶段)。
  • 用服务器的公钥把这把密钥加密,传到服务器。
  • 服务器用自己的私钥解开,拿到这把密钥。
  • 从此双方都用这把密钥做对称加密通信,这把密钥就成了实际通信用的密钥。 所以不是什么“需要三个密钥”,而是一把密钥有三个叫法,分别强调它的来源、算法、用途

三、为什么这个设计看起来这么复杂?不能更简单吗?#

看似绕了一大圈,实际上是在解决 “安全”与“速度”的矛盾。如果只做其中一步,都会有致命问题:

1. 为什么不全用非对称加密(公钥/私钥)一条路走到底?#

  • 太慢了。非对称加密的计算量是成千上万倍于对称加密的,如果用公钥直接加密整个网页,浏览器和服务器都会卡死。
  • 所以 TLS 的巧思是:用非对称加密,只加密那一小把“随机生成的对称密钥”,后面大流量全部切换到对称加密。

2. 为什么不固定使用一个对称密钥?每次都要随机生成?#

  • 如果全世界所有连接都用同一把对称密钥,一旦泄漏,全部通信都透明。
  • 每次随机生成会话密钥,即使这次通话被破解,也不会影响到上一次或下一次通话(前向安全性在 TLS 1.3 中更是通过 DH 密钥交换加强了)。

3. 为什么不直接在代码里写死对称密钥,然后明文传输?#

  • 那就等于没有加密,中间人直接看到密钥,后面的加密毫无意义。
  • 必须用服务器的公钥把密钥安全地“递”过去,而只有拥有对应私钥的服务器才能解开,这解决了密钥在网络上安全分发的问题。

4. 为什么还要有 CA 证书?#

  • 解决了“公钥真的是服务器的吗”这个问题。否则中间人可以把自己的公钥发给客户端,然后解密所有通信(中间人攻击)。
  • 通过 CA 证书链,浏览器能验证你访问的网站身份,确保用到的公钥确实属于该网站。

四、一图总结整个“复杂”的协作原理#

你的浏览器 (客户端)                          网站服务器
      |                                        |
      |  1. 请求建立安全连接                      |
      | --------------------------------------> |
      |                                        |
      |  2. 服务器发来 包含公钥的 TLS 证书          |
      | <-------------------------------------- |
      |  (浏览器验证证书:是否由可信CA签发?)        |
      |                                        |
      |  3. 生成“随机密钥”(也就是将来的对称密钥)     |
      |     用公钥加密这个随机密钥                 |
      | --------------------------------------> |
      |                                        |
      |  4. 服务器用私钥解密,得到随机密钥           |
      |                                        |
      |  5. 双方用这把对称密钥加密所有后续数据       |
      | <=====================================> |
      |   (高效的对称加密传输网页内容、登录密码等)    |

归根结底,这一整套“复杂”是在用最小的性能代价,换取三个安全目标:

  • 机密性(数据加密,无法窃听)
  • 完整性(数据无法被篡改)
  • 身份认证(确认你连接的是真实的服务器) “随机密钥/对称密钥/实际密钥”只是同一把钥匙在不同阶段的名字,设计成这样,不是绕弯,而是目前互联网上最平衡的安全与效率方案。