SSL/TLS
证书链、HTTPS;衔接 http-https。
SSL/TLS
用户与 API 之间的流量在公网是 明文可见 的——中间人可窃听、篡改 Cookie 与 Token。TLS(Transport Layer Security) 在 TCP 之上提供 机密性 + 完整性 + 服务端身份,对外常统称 HTTPS。后端工程师至少要会:证书链如何建立信任、Spring Boot 如何配 HTTPS、哪些场景必须强制 TLS。
学习目标
- 解释证书、公钥、证书链与「浏览器为何信任某站点」
- 配置 Spring Boot 或反向代理终止 TLS 的基本思路
- 与 http-https 衔接,理解握手在 HTTP 层之下发生
TLS 解决什么问题
| 能力 | 没有 TLS | 有 TLS |
|---|---|---|
| 窃听 | 密码、JWT 可被嗅探 | 信道加密 |
| 篡改 | 响应可被替换 | 完整性校验 |
| 冒充 | 连到假服务器 | 证书绑定域名 |
TLS 不解决:应用层 XSS、越权、弱密码——那些靠 sec-owasp 与业务逻辑。
证书链直觉
根 CA(内置在 OS/浏览器)
→ 中间 CA
→ 站点证书(含域名、公钥、有效期)
客户端校验:域名匹配、未过期、链签名有效。自签证书在 开发环境 可用,生产应对公网用户使用 公开 CA(Let's Encrypt、云厂商 ACM 等)。
两种常见部署模式
1. 反向代理终止 TLS(推荐生产)
Client --HTTPS--> Nginx / ALB --HTTP--> Spring Boot :8080
- 证书在 Nginx / 云负载均衡 上更新
- Spring 关注业务;注意配置
X-Forwarded-Proto以便生成正确跳转 URL - 内网段 HTTP 可接受,但 内网也应分区,防横向移动
2. Spring Boot 直接 HTTPS
# application-prod.yml 示例
server:
port: 8443
ssl:
enabled: true
key-store: classpath:keystore.p12
key-store-password: ${SSL_KEYSTORE_PASSWORD}
key-store-type: PKCS12
密钥密码 必须 来自环境变量,keystore 文件 不进 Git。
必须 HTTPS 的场景
- Basic 认证(Base64 非加密,仅编码)
- Cookie 会话 带
Secure时 - OAuth redirect 与 token 端点(见 oauth-flows)