fullchain (完整证书链文件(fullchain.pem))
定义
fullchain 是依次包含站点证书和中间证书的 PEM 文件,让客户端能把站点证书连到受信任的根证书。
fullchain 文件最常见的是 Certbot 生成的 fullchain.pem,它按顺序把站点(叶子)证书和中间证书拼接在一起,每张都是 PEM 格式。Certbot 在 /etc/letsencrypt/live/<域名>/ 下生成 cert.pem(只有站点证书)、chain.pem(只有中间证书)、fullchain.pem(两者都有)和 privkey.pem。根证书通常不放进去,因为客户端的信任库里已经有了。
为什么重要
握手时,服务器必须把客户端构建证书路径所需的证书都发过去。如果只配置了站点证书,部分客户端(curl、Java、一些安卓设备、小程序或 App 内的网络库)会报"unable to get local issuer certificate"之类的错,而桌面浏览器可能因为能通过 AIA 补全或缓存过中间证书而看起来一切正常,所以这个问题特别隐蔽。宝塔面板"证书(PEM格式)"一栏、腾讯云下载包里的 _bundle.crt,都应该是完整链。nginx 在 ssl_certificate 里填 fullchain;Apache 2.4.8 起也可以直接把完整链放进 SSLCertificateFile。
例子
cat example.com.crt intermediate.crt > fullchain.pem
openssl s_client -connect example.com:443 -servername example.com -showcerts </dev/null | grep -E "^ *[0-9] s:"
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
常见误区
- 证书链里要包含根证书。 不需要,客户端用的是自己信任库里的根证书。
- 顺序无所谓。 站点证书在最前,接着是签发它的中间证书,依此类推。
- 浏览器打得开,证书链就没问题。 浏览器可能掩盖问题,应该用 curl、OpenSSL 或 SSL 检测工具验证。