HTTPS 与 TLS
HTTP 以明文传输,存在被窃听、篡改、伪装三大风险。HTTPS 就是在 HTTP 与 TCP 之间加入 TLS(传输层安全协议),通过加密与证书解决安全问题。如今全站 HTTPS 已是标配,"HTTPS 握手过程"是网络面试出现率最高的考题之一。
HTTP 的三个风险与对策
| 风险 | 现象 | HTTPS 的应对 |
|---|---|---|
| 窃听 | 报文明文,可被中途读取 | 数据对称加密 |
| 篡改 | 内容可被改写而不被发现 | 摘要校验 / MAC |
| 伪装 | 攻击者冒充服务器骗取信息 | CA 数字证书验身份 |
两类加密算法
- 对称加密:加密与解密用同一把密钥,速度快(如 AES)。
- 非对称加密:公钥加密、私钥解密,无需提前共享密钥但速度慢(如 RSA、ECC)。
HTTPS 采用混合加密:先用非对称加密安全协商出临时的会话密钥,之后用对称加密传输海量业务数据,兼顾安全与性能:
明文数据 →(会话密钥, 对称加密 AES)→ 密文传输 →(同一密钥解密)→ 明文
会话密钥本身 →(服务器公钥, 非对称加密)→ 只有服务器私钥能解开
数字证书与 CA
如何证明"手里的公钥确实是服务器的"?由权威机构 CA 签发数字证书:
- 证书内容包含:域名、公钥、有效期、颁发者、CA 的数字签名。
- 浏览器/系统内置可信 CA 根证书,用根证书验证签名是否有效。
- 域名不符、证书过期、签名校验失败时,浏览器会给出安全警告。
TLS 握手过程
客户端 服务器
│ 1. ClientHello: 支持的TLS版本/算法/随机数 │
│────────────────────────────────────>│
│ 2. ServerHello + 证书 + 服务器公钥 │
│<────────────────────────────────────│
│ 3. 验证证书合法性,生成"预主密钥" │
│ 4. 用服务器公钥加密预主密钥 │
│────────────────────────────────────>│
│ 5. 服务器私钥解密,双方各自算出会话密钥 │
│ 此后改用会话密钥对称加密通信(业务数据) │
一句话概括:先验身份,再传密钥,后加密通信。TLS 1.3 进一步把握手压缩到 1 个 RTT,并移除了不安全的旧算法。
HTTPS 与 HTTP 对比
| 对比项 | HTTP | HTTPS |
|---|---|---|
| 默认端口 | 80 | 443 |
| 传输内容 | 明文 | TLS 加密 |
| 身份验证 | 无 | CA 证书 |
| 性能 | 更快 | 多出握手开销,略慢 |
| 典型场景 | 测试/内网 | 登录、支付、生产环境 |
优化与场景
登录、支付、涉及隐私的接口必须启用 HTTPS。常见优化手段:
- 会话复用:同一客户端复用已协商的密钥,减少握手次数;
- TLS 1.3 与 HTTP/2 配合降低连接建立成本;
- CDN 边缘做证书卸载,把 TLS 终止在离用户更近的节点。
小结:HTTPS = HTTP + TLS。核心链路是"CA 证书验身份 → 非对称算法协商会话密钥 → 对称加密传输数据"。能画出握手时序并解释混合加密的动机,这一考点就稳了。