SSL/TLS

HTTPS 强制升级指南:TLS 1.3 配置与证书链优化

2026-07-05 阅读 2,876 次 作者:DomainPulse 团队 预计阅读时间:10 分钟

HTTPS 已经成为现代网站的标配,不仅是微信生态的强制要求,也是 Google 搜索排名的重要因素。本文将详细介绍如何配置完善的 HTTPS,包括 TLS 1.3 启用、证书链优化、HSTS、OCSP Stapling 等高级配置。

一、为什么必须启用 HTTPS

  • 微信强制要求:未启用 HTTPS 的域名在微信内会被标记为不安全,甚至直接拦截
  • SEO 排名提升:Google 自 2014 年起将 HTTPS 作为排名信号
  • 数据安全:防止中间人攻击、数据窃听和内容篡改
  • 用户信任:浏览器地址栏显示安全锁标志,提升用户信任度

二、TLS 1.3 的优势与配置

TLS 1.3 是 HTTPS 协议的最新版本,相比 TLS 1.2 有以下优势:

  • 更快的握手速度:TLS 1.3 握手仅需 1-RTT,TLS 1.2 需要 2-RTT
  • 更强的安全性:移除了 MD5、SHA-1、RC4、DES 等弱算法
  • 前向保密:所有握手模式默认启用前向保密(PFS)
  • 0-RTT 模式:支持会话恢复,已访问过的用户可实现零往返握手

Nginx 配置 TLS 1.3

server {
    listen 443 ssl http2;
    server_name example.com;

    # SSL 证书路径
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

    # TLS 版本(禁用 TLS 1.0/1.1)
    ssl_protocols TLSv1.2 TLSv1.3;

    # 加密套件(优先使用 TLS 1.3 套件)
    ssl_ciphers TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256;
    ssl_prefer_server_ciphers off;

    # 会话缓存
    ssl_session_cache shared:SSL:50m;
    ssl_session_timeout 1d;
    ssl_session_tickets off;

    # OCSP Stapling
    ssl_stapling on;
    ssl_stapling_verify on;
    ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem;
    resolver 8.8.8.8 8.8.4.4 valid=300s;
    resolver_timeout 5s;

    # HSTS(强制 HTTPS)
    add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;
}

三、证书链优化

证书链不完整是导致 SSL 检测失败的常见原因。一个完整的证书链包含:

  • 服务器证书(Leaf):颁发给您的域名
  • 中间证书(Intermediate):连接服务器证书和根证书的桥梁
  • 根证书(Root):预装在操作系统和浏览器中的信任锚点

检查证书链完整性

# 使用 OpenSSL 检查证书链
openssl s_client -connect example.com:443 -servername example.com -showcerts

# 检查证书链是否完整(Verify return code 应为 0)
# 如果显示 "Verify return code: 21 (unable to verify the first certificate)"
# 说明证书链不完整,需要配置中间证书

Let's Encrypt 证书链配置

使用 Let's Encrypt 时,证书链文件通常位于:

  • /etc/letsencrypt/live/example.com/fullchain.pem — 包含服务器证书 + 中间证书
  • /etc/letsencrypt/live/example.com/cert.pem — 仅服务器证书
  • /etc/letsencrypt/live/example.com/chain.pem — 仅中间证书
  • /etc/letsencrypt/live/example.com/privkey.pem — 私钥

在 Nginx 中,应使用 fullchain.pem 作为 ssl_certificate,这样会自动发送完整的证书链。

四、HSTS 配置详解

HSTS(HTTP Strict Transport Security)告诉浏览器在一段时间内强制使用 HTTPS 访问该域名,即使用户输入的是 HTTP 地址。

# HSTS 响应头
Strict-Transport-Security: max-age=63072000; includeSubDomains; preload
  • max-age:HSTS 有效期,单位秒。63072000 = 2 年
  • includeSubDomains:该策略同时应用于所有子域名
  • preload:允许浏览器厂商将该域名加入预加载列表

警告:在启用 HSTS 之前,请确保您的网站已完全支持 HTTPS,否则用户将无法通过 HTTP 访问。

五、OCSP Stapling 配置

OCSP Stapling 允许服务器在 TLS 握手时直接提供证书状态信息,避免客户端单独向 CA 查询,提升握手速度并保护隐私。

# Nginx OCSP Stapling 配置
ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;

验证 OCSP Stapling 是否生效:

openssl s_client -connect example.com:443 -servername example.com -status | grep "OCSP Response Status"

六、证书自动续期

Let's Encrypt 证书有效期为 90 天,建议设置自动续期:

使用 Certbot 自动续期

# 安装 Certbot
sudo apt install certbot python3-certbot-nginx

# 申请证书(Nginx 插件自动配置)
sudo certbot --nginx -d example.com -d www.example.com

# 测试自动续期
sudo certbot renew --dry-run

# 设置定时任务(每天检查)
echo "0 3 * * * root certbot renew --quiet" | sudo tee -a /etc/crontab

使用 acme.sh 自动续期

# 安装 acme.sh
curl https://get.acme.sh | sh

# 申请证书
~/.acme.sh/acme.sh --issue -d example.com --nginx

# 安装证书到指定路径
~/.acme.sh/acme.sh --install-cert -d example.com     --key-file /etc/nginx/ssl/example.com.key     --fullchain-file /etc/nginx/ssl/example.com.crt     --reloadcmd "systemctl reload nginx"

# acme.sh 会自动创建 cron 任务,无需手动设置

七、SSL 检测与评分

配置完成后,建议使用以下工具检测 SSL 配置:

  • DomainPulse SSL 监控:检测证书有效期、证书链、加密套件等
  • SSL Labs:https://www.ssllabs.com/ssltest/ — 综合 SSL 评分
  • Mozilla SSL Configuration Generator:生成最佳 SSL 配置

八、常见问题排查

1. 证书链不完整

症状:部分浏览器显示证书错误,SSL Labs 评分降低。

解决:确保使用 fullchain.pem 而非 cert.pem

2. TLS 版本过低

症状:微信提示"该网页不安全",SSL Labs 评分 B 以下。

解决:禁用 TLS 1.0/1.1,仅保留 TLS 1.2/1.3。

3. 弱加密套件

症状:安全扫描报告提示使用弱算法。

解决:更新 ssl_ciphers 配置,移除 RC4、DES、3DES、MD5 等算法。

4. 证书过期

症状:所有浏览器显示"证书已过期"警告。

解决:设置自动续期(Certbot/acme.sh),或使用 DomainPulse SSL 监控设置到期提醒。

总结

完善的 HTTPS 配置不仅是微信生态的准入门槛,也是现代网站安全的基础。通过启用 TLS 1.3、优化证书链、配置 HSTS 和 OCSP Stapling,您可以获得 A+ 的 SSL 评分,确保域名在微信内安全可信。