术语表

中间证书 (Intermediate Certificate)

最后核实

定义

中间证书是由根证书(或上级中间证书)签发、用来签发网站证书的 CA 证书,服务器必须把它和网站证书一起发送给客户端。

中间证书连接网站的终端证书和 根证书。它由根证书或上一级中间证书签发,基本约束里带有 CA:TRUE,因此对应的密钥可以继续签发证书。公共 CA 几乎都用中间证书签发 TLS 证书,以便根私钥保持离线;运营中间证书的一方就是 下级 CA。

为什么重要

客户端本地只有根证书,没有中间证书,所以服务器必须把构建 证书链 所需的中间证书全部发出。漏配中间证书是最常见的部署错误之一:桌面浏览器可能因为缓存过或按 AIA 地址自动下载而显示正常,但 curl、Python、Java、Go 和很多安卓 App 会报“unable to get local issuer certificate”之类的错误。在宝塔面板或云厂商控制台粘贴证书时,应粘贴完整链(网站证书在前、中间证书在后),而不是只贴网站证书。CA 也会定期更换中间证书,把某个中间证书写死在程序里迟早会出问题。

例子

nginx 中把网站证书放在前、中间证书放在后,合并成一个文件:

cat example.com.crt intermediate.crt > fullchain.pem
ssl_certificate     /etc/nginx/ssl/fullchain.pem;
ssl_certificate_key /etc/nginx/ssl/example.com.key;

常见误区

  • Chrome 能打开就说明证书链完整。 浏览器能自动补齐缺失的中间证书,其他客户端不一定能,应该用 openssl s_client 或在线检测工具验证。
  • 在客户端信任库里加上中间证书即可。 正确做法是修好服务器配置,而不是在每个客户端上打补丁。
  • Certbot 的 cert.pem 就够用。 cert.pem 只有网站证书本身,nginx 应该引用 fullchain.pem。

延伸阅读