CodeRoadMap
首页路线题库资源库文章社区
CodeRoadMap

程序员的学习成长路线图。内容免费开放,登录后可同步路线图与课时进度。

由 程序员柏风 独立维护 · 关于作者

学习

  • 路线图
  • 课程
  • 面试题
  • 文章
  • 我

更多

  • 资源
  • 社区
  • 关于作者
  • 内容说明

© 2026 CodeRoadMap

津ICP备2026012044号-1·津公网安备12011002026155号·coderoadmap@126.com
Web 与安全入门/课时/SSL/TLS
RawBlame
课时目录12 节

Web 与安全入门

  1. 01Web 安全概览
  2. 02OWASP 风险
  3. 03SSL/TLS
  4. 04CORS
  5. 05CSP 内容安全策略
  6. 06服务器安全
  7. 07密码哈希
  8. 08Basic 认证
  9. 09令牌认证
  10. 10Cookie 认证
  11. 11SAML 简介
  12. 12综合练习

SSL/TLS

证书链、HTTPS;衔接 http-https。

30 分钟

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)
  • 任何 登录、支付、PII 接口
  • 开发本地可用 http://localhost,但 集成测试环境起就应 mimic 生产 的 HTTPS 行为,避免「本地 OK、上线 Cookie 失效」。

    常见配置错误

    错误后果
    混合内容:HTTPS 页加载 HTTP 脚本被降级攻击
    证书域名与 API 域名不一致客户端拒绝连接
    禁用证书校验「临时调试」进生产中间人畅通无阻
    TLS 1.0 / 弱 cipher 未关可被降级破解

    现代服务器默认应 TLS 1.2+,并跟随 Mozilla SSL Configuration Generator 或云厂商最佳实践。

    HSTS(可选强化)

    响应头:

    Strict-Transport-Security: max-age=31536000; includeSubDomains
    

    告诉浏览器 在有效期内只走 HTTPS。首次访问仍可能遭降级,通常与 全站 HTTPS + 301 跳转 一起上。

    与 Spring Security 的关系

    sb-security 可配置 requiresChannel().anyRequest().requiresSecure() 强制 HTTPS。若 TLS 在 Nginx 终止,需正确识别 X-Forwarded-Proto,否则可能 无限重定向 或 误判为 HTTP。

    练习

    • 用浏览器 DevTools → Security 面板查看任意 HTTPS 站的证书链
    • 阅读 http-https,对比「握手步骤」与本文「证书链」描述
    • 列出你项目:TLS 在哪一层终止?密钥存在哪、谁轮换?

    小结

    公网 API 默认 HTTPS;证书在边界或 Boot 正确挂载;Basic 与 Cookie 无 TLS 等于裸奔。 下一课讲浏览器同源与 CORS——应用层跨域控制。

    加载本节练习…
    ← 上一课OWASP 风险下一课 →CORS