文章
关于SSL、TLS、HTTPS
目录
| 概念 | 本质 | 状态 |
|---|---|---|
| SSL | 网景公司开发的老旧加密协议 | 已被淘汰,有严重漏洞 |
| TLS | IETF 在 SSL 基础上改进并更名,是目前的标准 | 正在使用 (TLS 1.2/1.3) |
| HTTPS | HTTP + SSL/TLS,把 HTTP 通信装进 TLS 加密隧道 | 就是我们日常看到的https网站 |
一句话关系: HTTPS = HTTP over TLS (现在没人用 SSL 了,但名称习惯上还叫 SSL 证书,实际上是 TLS 证书)。#
二、“随机密钥、对称密钥、实际密钥” 到底是什么?它们是同一个东西的不同称呼#
图片里的这段原话可能会让人误以为存在三个不同的密钥:
“客户端会生成一个随机的密钥(Random Key)……这个随机密钥就被称为‘实际密钥’(对称密钥)。” 这里其实是在描述同一个密钥在生命周期里的三个名字,而不是三把不同的密钥。
- 随机密钥
- 指的是它怎么来的:每次握手时,客户端临时、随机生成的一段数据。
- 目的:保证每个会话的密钥都是全新、不可预测的,防止重放攻击。
- 对称密钥
- 指的是它加密算法的类型:这把密钥将在后续通信中用于对称加密(比如 AES),加密解密用同一把钥匙。
- 之所以用对称加密,是因为它比非对称加密快得多,适合大量数据加密。
- 实际密钥
- 指的是它最终用来干什么:它就是双方真正用来加密网页内容、图片、密码等实际数据的密钥。
- 也就是“后面实际数据传输时用的那把对称密钥”。
因此,整个过程其实只涉及一次“生成” + 一次“安全传递”#
- 客户端随机生成一把未来的对称密钥(随机密钥阶段)。
- 用服务器的公钥把这把密钥加密,传到服务器。
- 服务器用自己的私钥解开,拿到这把密钥。
- 从此双方都用这把密钥做对称加密通信,这把密钥就成了实际通信用的密钥。 所以不是什么“需要三个密钥”,而是一把密钥有三个叫法,分别强调它的来源、算法、用途。
三、为什么这个设计看起来这么复杂?不能更简单吗?#
看似绕了一大圈,实际上是在解决 “安全”与“速度”的矛盾。如果只做其中一步,都会有致命问题:
1. 为什么不全用非对称加密(公钥/私钥)一条路走到底?#
- 太慢了。非对称加密的计算量是成千上万倍于对称加密的,如果用公钥直接加密整个网页,浏览器和服务器都会卡死。
- 所以 TLS 的巧思是:用非对称加密,只加密那一小把“随机生成的对称密钥”,后面大流量全部切换到对称加密。
2. 为什么不固定使用一个对称密钥?每次都要随机生成?#
- 如果全世界所有连接都用同一把对称密钥,一旦泄漏,全部通信都透明。
- 每次随机生成会话密钥,即使这次通话被破解,也不会影响到上一次或下一次通话(前向安全性在 TLS 1.3 中更是通过 DH 密钥交换加强了)。
3. 为什么不直接在代码里写死对称密钥,然后明文传输?#
- 那就等于没有加密,中间人直接看到密钥,后面的加密毫无意义。
- 必须用服务器的公钥把密钥安全地“递”过去,而只有拥有对应私钥的服务器才能解开,这解决了密钥在网络上安全分发的问题。
4. 为什么还要有 CA 证书?#
- 解决了“公钥真的是服务器的吗”这个问题。否则中间人可以把自己的公钥发给客户端,然后解密所有通信(中间人攻击)。
- 通过 CA 证书链,浏览器能验证你访问的网站身份,确保用到的公钥确实属于该网站。
四、一图总结整个“复杂”的协作原理#
你的浏览器 (客户端) 网站服务器
| |
| 1. 请求建立安全连接 |
| --------------------------------------> |
| |
| 2. 服务器发来 包含公钥的 TLS 证书 |
| <-------------------------------------- |
| (浏览器验证证书:是否由可信CA签发?) |
| |
| 3. 生成“随机密钥”(也就是将来的对称密钥) |
| 用公钥加密这个随机密钥 |
| --------------------------------------> |
| |
| 4. 服务器用私钥解密,得到随机密钥 |
| |
| 5. 双方用这把对称密钥加密所有后续数据 |
| <=====================================> |
| (高效的对称加密传输网页内容、登录密码等) |
归根结底,这一整套“复杂”是在用最小的性能代价,换取三个安全目标:
- 机密性(数据加密,无法窃听)
- 完整性(数据无法被篡改)
- 身份认证(确认你连接的是真实的服务器) “随机密钥/对称密钥/实际密钥”只是同一把钥匙在不同阶段的名字,设计成这样,不是绕弯,而是目前互联网上最平衡的安全与效率方案。