全部学科
Python全栈
python
NodeJS全栈
nodejs
小程序首页
📅 2026-05-20 8 分钟 ✍️ juanwangdev

HTTPS与SSL/TLS配置

HTTPS 是现代 Web 服务的基础。正确的 SSL/TLS 配置可防止中间人攻击和数据窃听。

基础 HTTPS 配置

证书配置

nginx
server {
    listen 443 ssl http2;
    server_name example.com;
    
    ssl_certificate     /etc/nginx/ssl/example.com.pem;
    ssl_certificate_key /etc/nginx/ssl/example.com.key;
    
    root /var/www/html;
}

http2 参数启用 HTTP/2 协议,与 SSL 结合可显著提升性能。证书推荐使用 Let's Encrypt 自动管理。

协议与加密套件

限制 TLS 版本

nginx
server {
    # 仅允许 TLS 1.2 和 1.3
    ssl_protocols TLSv1.2 TLSv1.3;
    
    # 禁用不安全的 SSL 会话压缩
    ssl_session_tickets off;
}

TLS 1.0 和 1.1 已被各大标准组织废弃,存在已知漏洞。生产环境应仅启用 1.2+。

加密套件选择

nginx
ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384';
ssl_prefer_server_ciphers on;

ssl_prefer_server_ciphers on 让服务器决定加密套件优先级,防止客户端降级攻击。优先使用 ECDHE(前向安全)+ GCM(认证加密)。

SSL 会话优化

会话缓存

nginx
http {
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;
}

shared 类型可在 worker 进程间共享,10m 约可存储 40000 个会话。避免使用 builtin 类型。

OCSP Stapling

nginx
server {
    ssl_stapling on;
    ssl_stapling_verify on;
    ssl_trusted_certificate /etc/nginx/ssl/chain.pem;
    resolver 8.8.8.8 8.8.4.4 valid=300s;
    resolver_timeout 5s;
}

OCSP Stapling 由服务器代替客户端向 CA 查询证书状态,减少连接延迟和隐私泄露。

HTTP 严格传输安全 (HSTS)

nginx
server {
    add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;
}
  • max-age 浏览器记住 HTTPS 的时间(秒),建议 2 年
  • includeSubDomains 应用到所有子域名
  • preload 允许提交到浏览器预加载列表

HSTS 必须在 HTTPS 响应中设置。首次访问仍可能被劫持,建议将域名加入 HSTS Preload List。

HTTP 到 HTTPS 重定向

nginx
server {
    listen 80;
    server_name example.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2;
    server_name example.com;
    # SSL 配置...
}

301 永久重定向,浏览器会缓存跳转行为。$host 保持原始 Host 头,$request_uri 保持完整路径和参数。

双向 TLS 认证 (mTLS)

nginx
server {
    listen 443 ssl;
    
    ssl_client_certificate /etc/nginx/ssl/ca.pem;
    ssl_verify_client optional;
    
    location /api/ {
        if ($ssl_client_verify != SUCCESS) {
            return 403;
        }
        proxy_pass http://backend;
    }
}

mTLS 要求客户端提供有效证书,适用于 API 间通信或内部服务认证。optional 模式可在特定 location 强制验证。

要点总结

  • 仅允许 TLS 1.2+,禁用 SSLv3/TLS1.0/TLS1.1
  • 使用 ECDHE + GCM 加密套件,启用前向安全
  • 配置 ssl_session_cache shared 实现跨 worker 会话共享
  • 启用 OCSP Stapling 减少证书验证延迟
  • 设置 HSTS 头强制浏览器使用 HTTPS
  • HTTP 流量 301 重定向到 HTTPS
  • 内部服务可使用 mTLS 实现双向认证

📝 发现内容有误?点击此处直接编辑

← 上一篇 连接超时与keepalive优化
下一篇 → 反向代理与负载均衡安全
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库