1480 字
约 4 分钟
0
HTTPS 入门
HTTPS 入门
1. 一句话简介
HTTPS(Hypertext Transfer Protocol Secure)是在 HTTP 之上叠加 TLS/SSL 加密层 的安全传输协议。本 demo 通过 server.ssl.* 配置为内嵌 Tomcat 启用 SSL,并自定义 HttpsConfig 配置类,让 Tomcat 同时监听 80(HTTP)与 443(HTTPS)两个端口,实现 HTTP 请求自动重定向到 HTTPS。它解决的核心问题是:在浏览器与服务器之间传输的数据(账号密码、支付信息、业务数据)明文可被窃听、篡改,而 HTTPS 通过证书身份认证 + 对称加密 + 消息完整性校验,保证数据的机密性、完整性与服务器的身份可信。
2. 什么时候使用
✅ 适用场景
- 涉及账号登录、表单提交,需要保护用户口令与敏感信息不被中途窃取(如登录页、注册页、支付回调)。
- 全站或部分接口需要防止中间人攻击、数据被篡改,对传输完整性有要求。
- 需要证明服务器身份可信,例如电商、银行、需要向用户展示锁形图标的站点。
- Web 应用与移动端、第三方系统对接的回调地址(如微信/支付宝回调)被平台强制要求 HTTPS。
- 在内嵌 Tomcat 环境下追求低改造成本的 HTTPS 接入:只需在
application.yml配置证书路径与密码,Spring Boot 会自动完成 SSL 初始化,无需改动业务代码。 - 开发/测试环境快速启用加密传输,验证 HTTPS 相关逻辑,可用
keytool生成自签名证书零成本实现(本 demo 的做法)。
❌ 不适用 / 需谨慎
- 纯内网、对传输安全性要求不高的场景,HTTPS 的 TLS 握手会增加额外延迟与 CPU 开销,属于过度设计。
- 自签名证书不能用于生产环境——浏览器会提示"不安全",用户无法建立信任,必须改用受信任的 CA 证书(Let's Encrypt 或商业 CA)。
- 证书管理有运维成本:证书有有效期(如 Let's Encrypt 90 天需自动续期),过期将导致站点不可访问。
- 需要处理证书双向认证(mTLS)、证书轮换、多域名(SAN)等复杂场景时,仅靠本 demo 的简单配置不够,需另行设计。
- 当请求量极大、性能敏感,且由 Nginx/LB 等反向代理统一做 SSL 终结时,不必让每个 Spring Boot 实例都承载 TLS 解密。
3. 常见业务场景
- Web 站点、后台管理系统全站加密:用户通过浏览器访问管理后台,配置 HTTPS 后所有请求走加密通道。本 demo 的
static/index.html即演示了通过https://localhost访问静态页面,而访问http://localhost会被自动 302 重定向到 HTTPS。 - 统一登录与账号安全:登录、注册、修改密码等页面的表单提交数据含敏感凭证。HTTPS 保证这些凭证在网络传输中不可被窃听,是账号体系的安全底线。本 demo 通过
SecurityConstraint设置CONFIDENTIAL约束并匹配/*,相当于对全站所有路径强制加密传输,可直接复用该思路到需要全站保护的场景。 - API 服务对外暴露:REST 接口供移动端、第三方系统调用时采用 HTTPS,防止接口参数与返回数据在公网明文暴露。可只在自己的应用上启用 SSL 而不依赖外部代理,适合直接对外暴露、无法前置反代的场景。
- 合规与信任背书:银行、政务、金融、电商等行业的合规要求强制全站 HTTPS,并向用户展示受信任的站点锁图标以提升转化率与信任度。
- 端口收敛的双通道过渡:在迁移 HTTPS 的过渡期,保留 80 端口仅用于重定向、443 端口处理真实流量,保证用户访问旧
http://地址仍能平滑落到 HTTPS,无缝完成升级(正是本 democonnector配置所为)。
4. 同类技术对比
| 维度 | Spring Boot 内嵌 HTTPS(本 demo) | Nginx 反向代理终结 SSL | 全站 HTTP(明文) |
|---|---|---|---|
| 部署形态 | 应用本身监听 443,独立即成 | 需前置 Nginx/LB,应用监听 80/内网 | 直接监听 80 |
| 配置难度 | 低(server.ssl.* 配置项即可) |
中(需证书 + 代理配置 + 上游协调) | 低 |
| 数据加密 | 全程 TLS 加密 | TLS 终结在代理,代理到上游多为明文 | 明文不加密 |
| 可维护性 | 证书、应用、端口耦合在一起 | 证书与业务解耦,集中管理、易轮换 | 无需管证书 |
| 性能开销 | 应用承受每个请求的 TLS 解密 | TLS 卸载到高性能代理,后端压力小 | 无 TLS 开销 |
| 适用规模 | 中小型应用、单体、直接对外 | 高并发、微服务集群、多域名 | 内网/低安全需求 |
选型建议
单机部署、应用直接对外、希望零依赖接入的一个或多个 Spring Boot 服务,优先考虑内嵌 HTTPS 方案;集群、高并发、需要统一证书管理与多域名证书并存的场景,更适合用 Nginx/LB 做 SSL 终结,业务侧保持透明;纯内网或低敏感数据,可维持 HTTP 以节省 TLS 开销。无论选哪种,生产环境都务必使用受信任的 CA 证书,仅在开发/测试阶段可使用 keytool 自签名证书(本 demo 采用的方式)。
评论
0 条
还没有评论,先写一条吧。