HTTP vs HTTPS:安全连接的底层逻辑
在互联网上,数据传输的安全性至关重要。HTTP 与 HTTPS 的核心区别在于一个“S”(Secure),而这个安全性的背后是复杂的加密技术和协议握手。
HTTP 与 HTTPS 的核心差异
| 特性 | HTTP | HTTPS |
|---|---|---|
| 安全性 | 明文传输,易被窃听和篡改 | 加密传输,具有机密性、完整性 |
| 默认端口 | 80 | 443 |
| 底层协议 | TCP | TCP + SSL/TLS |
| 证书要求 | 无需证书 | 需要向 CA 机构申请 SSL 证书 |
HTTPS 的安全支柱
HTTPS 能够保证安全,主要依赖于以下三个特性:
- 机密性 (Confidentiality):通过对称加密对传输的数据进行加密,防止被第三方窃听。
- 完整性 (Integrity):通过数字签名 (MAC) 确保数据在传输过程中不被恶意篡改。
- 身份验证 (Authentication):通过 CA 数字证书 验证服务器的身份,防止“中间人攻击”。
核心重点:HTTPS 握手过程 (TLS 1.2 为例)
为了在不可靠的网络中安全地交换“对称密钥”,HTTPS 使用了非对称加密。这个过程被称为 SSL/TLS 握手:
第一阶段:明文协商 (Client Hello)
注意:此阶段是明文传输的。 客户端向服务器发送请求,提供以下信息:
- 客户端支持的 TLS 版本、密码套件列表。
- 客户端随机数 (Client Random):明文传输。
第二阶段:服务器回应与证书 (Server Hello)
此阶段依然是明文传输。 服务器确认加密细节,并返回:
- 选定的 TLS 版本、加密算法以及 服务器随机数 (Server Random)。
- 数字证书 (Certificate):包含服务器的公钥。
- 为什么证书是安全的? 虽然证书是明文传输的,但它包含了 CA(证书颁发机构)的数字签名。客户端会使用内置在浏览器中的 CA 公钥去验证签名。如果签名验证通过,客户端就能确定:这个公钥确实属于该服务器,没有被篡改。
第三阶段:非对称加密的关键 (Key Exchange)
这是安全性发生质变的一步:
- 生成预主密钥 (Pre-master Secret):客户端在本地生成一个全新的随机数。
- 公钥加密:客户端取出证书中的服务器公钥,将预主密钥进行加密。
- 发送加密包:将加密后的密文发送给服务器。
- 细节: 即使黑客截获了这个包,由于他没有服务器的私钥,他也无法解密出其中的预主密钥。只有拥有私钥的服务器才能解密出这个随机数。
第四阶段:计算会话密钥
此时,客户端和服务器都拥有了三个参数:Client Random + Server Random + Pre-master Secret。
- 由于
Pre-master Secret的交换是受非对称加密保护的,黑客无法凑齐这三个参数。 - 双方各自通过这三个参数计算出同一个 会话密钥 (Session Key)。
- 此时开始,双方切换为对称加密模式。
第五阶段:握手完成
- 客户端发送
Change Cipher Spec,告诉服务器:“以后我们就用这个会话密钥加密了”。 - 服务器同样回复确认。握手结束,开始安全传输数据。
为什么不一直使用非对称加密?
你可能会问:既然非对称加密(公钥/私钥)那么安全,为什么不直接用它传输所有数据?
- 性能差距:非对称加密涉及复杂的数学运算(大数分解等),处理速度比对称加密慢几个数量级(约 100~1000 倍)。
- 混合加密方案:HTTPS 采用了“混合加密”:
- 使用非对称加密来安全地交换对称密钥(即上述握手阶段)。
- 交换完成后,使用高效的对称加密来传输实际业务数据。
总结
HTTPS 不是一种全新的协议,而是 HTTP on SSL/TLS。通过 CA 证书解决了“服务器是谁”的问题,通过非对称加密解决了“如何安全交换钥匙”的问题,最后通过对称加密解决了“大数据量高效传输”的问题。