优化Nginx证书链体积需用2级链(域名证+1张中间证)、只部署fullchain.pem(不含根证书)、清理PEM冗余换行注释、ssl_trusted_certificate单独配可信根。

优化 Nginx 的证书链文件体积,核心目标是减少 TLS 握手阶段服务器发送的 Certificate 消息大小,从而压缩握手报文、降低首字节延迟(TTFB),尤其对移动端和弱网用户效果显著。这不是单纯“删字段”,而是通过结构精简、格式规范和可信根分离实现高效传输。
用 2 级证书链替代冗长多级链
Let’s Encrypt 和 ZeroSSL 默认签发的是「域名证书 → R3 中间 CA → ISRG Root X1」的 2 级链(不含根证书),已足够精简。避免使用含 3 级及以上中间证书的商业链(如某些旧版 Sectigo 链),它们会额外增加 2–4KB 握手数据。确认方式:用 openssl crl2pkcs7 -nocrl -certfile fullchain.pem | openssl pkcs7 -print_certs -noout 查看证书数量,应为 2 张(域名证书 + 1 张中间证书)。
只部署 fullchain.pem,不拼接根证书
Nginx 的 ssl_certificate 必须指向 fullchain.pem(即域名证书 + 中间证书),不能 把根证书也追加进去。根证书由客户端本地信任库提供,硬塞进去只会增大握手包且被忽略。常见错误是手动合并成「cert + intermediate + root」三段,这会让 Certificate 消息多出 1.5KB 以上,毫无必要。
去除 PEM 文件中的非必要换行与注释
确保 fullchain.pem 是标准格式:每张证书以 -----BEGIN CERTIFICATE----- 开头,-----END CERTIFICATE----- 结尾,中间仅含 Base64 字符,无空行、无注释、无多余空格。可用以下命令清理:awk '/^-----BEGIN CERTIFICATE-----$/,/^-----END CERTIFICATE-----$/ {print}' fullchain.pem | sed '/^$/d' > clean-fullchain.pem
实测可减少 200–400 字节冗余,对高并发小包场景有累积收益。
用 ssl_trusted_certificate 单独指定可信根,不混入链中
ssl_trusted_certificate 用于 OCSP Stapling 验证和代理后端证书校验,它应单独指向系统级信任根(如 /etc/ssl/certs/ca-certificates.crt 或仅含 ISRG Root X1 的 PEM),绝不复用 fullchain.pem。混用会导致 Nginx 在内部解析时多加载一份冗余数据,虽不发给客户端,但会增加内存和 CPU 开销。


















