1. 引言
在面试中,「HTTPS 是如何保证传输安全的」是一个高频问题。它考察的不只是对 HTTPS 的背诵,更是对加密、摘要、证书等基础概念的掌握程度。本文从一次完整的 HTTPS 请求出发,拆解它究竟解决了什么问题、又是如何一步步保证安全的。
2. 先搞清楚:HTTP 有什么问题
要理解 HTTPS 的价值,先看 HTTP 明文传输的三大风险:
- 窃听风险:数据以明文在网络上传输,攻击者可以抓包直接看到内容。
- 篡改风险:中间人可以修改传输中的数据,接收方无法察觉。
- 冒充风险:客户端无法确认服务器身份,可能被钓鱼网站欺骗。
HTTPS 的核心目标,就是同时解决这三大问题。它并不是一种新协议,而是在 HTTP 和 TCP 之间加了一层 TLS/SSL 协议。
3. HTTPS 的整体架构
HTTPS 的传输过程可以简化为下图:
从分层角度看,TLS 位于应用层和传输层之间。它向上为 HTTP 提供加密通道,向下基于 TCP 传输。整个 HTTPS 的安全性,本质上由 TLS 协议保证。
4. 核心机制一:对称加密保证机密性
数据在传输过程中需要加密,最常用的是对称加密算法,例如 AES。它的特点是加密和解密使用同一把密钥,速度快、适合大量数据。
但对称加密有一个前提问题:客户端和服务器如何安全地共享这把密钥?如果直接通过网络传输密钥,密钥本身就可能被窃听。这就引出了第二个核心机制。
5. 核心机制二:非对称加密协商密钥
非对称加密使用一对密钥:公钥和私钥。公钥可以公开分发,私钥只有持有者自己保存。用公钥加密的数据只能用私钥解密,反之亦然。
HTTPS 的握手阶段正是利用非对称加密来协商对称密钥,常见流程如下:
- 客户端向服务器发起请求,并携带支持的加密套件列表。
- 服务器返回数字证书(内含公钥)和选定的加密套件。
- 客户端验证证书合法性后,生成一个随机数(预主密钥),用服务器公钥加密后发送。
- 服务器用私钥解密得到预主密钥。
- 双方基于预主密钥各自计算出会话所用的对称密钥。
这样,对称密钥从未在网络上明文传输,而是通过非对称加密安全地协商出来。之后的数据传输全部使用对称加密,兼顾了安全性和性能。
6. 核心机制三:数字证书防止冒充
非对称加密解决了密钥分发问题,但还有一个漏洞:如果攻击者伪造一个公钥发给客户端,客户端无法分辨真假。这就需要数字证书来确认服务器身份。
数字证书由权威的证书颁发机构(CA)签发,包含服务器的公钥、域名、有效期等信息,并由 CA 的私钥签名。客户端验证证书时,会做以下几件事:
- 检查证书是否由受信任的 CA 签发。
- 验证证书的域名与访问的域名是否一致。
- 检查证书是否在有效期内。
- 验证证书签名是否完整,确保证书未被篡改。
通过证书链的信任传递,客户端可以确认自己正在和真正的服务器通信,从而防止中间人冒充。
7. 核心机制四:消息摘要保证完整性
加密只能防止内容被偷看,但无法防止内容被篡改。为此,TLS 使用消息摘要算法(如 SHA-256)为每条消息生成一个摘要值,并随消息一起发送。
接收方收到数据后,用同样的算法重新计算摘要,与收到的摘要对比。如果两者不一致,说明数据在传输过程中被修改,连接会被立即终止。这样,HTTPS 同时保证了数据的机密性、完整性和身份真实性。
8. 一次完整 HTTPS 请求的流程
把上述机制串起来,一次完整的 HTTPS 请求大致如下:
- 客户端发起 TLS 握手,发送支持的加密套件和随机数。
- 服务器返回数字证书和随机数。
- 客户端验证证书,生成预主密钥并用服务器公钥加密发送。
- 服务器用私钥解密,双方协商出对称会话密钥。
- 握手完成,后续 HTTP 数据全部用对称密钥加密传输。
- 每条消息附带摘要值,接收方校验完整性。
整个过程可以概括为:用非对称加密协商对称密钥,用对称加密传输数据,用数字证书验证身份,用摘要保证完整性。
9. 总结
回到面试题本身,HTTPS 保证传输安全的核心可以归纳为四点:
- 机密性:通过对称加密(AES 等)加密传输数据。
- 密钥安全分发:通过非对称加密(RSA/ECDHE 等)协商对称密钥。
- 身份真实性:通过 CA 签发的数字证书验证服务器身份。
- 完整性:通过消息摘要(SHA-256 等)防止数据被篡改。
面试时如果能从这四个维度展开,并结合握手流程讲清楚,就能给面试官留下扎实的印象。