根证书过期极少见,但中间证书或信任链中断会导致HTTPS握手失败;需用openssl验证链完整性、有效期及系统CA信任库,并确认Nginx配置ssl_certificate指向fullchain.pem且权限正确。

根证书过期本身极少见(根证书有效期通常长达10–25年),但中间证书或信任链中某一级CA证书过期,会导致Nginx对外提供的HTTPS服务在部分客户端(尤其是iOS、Android、微信小程序、Java/Python应用)上握手失败,表现为“证书不可信”“NET::ERR_CERT_AUTHORITY_INVALID”等错误——这和域名证书过期不同,它不显示具体“已过期”,而是直接拒绝建立信任。排查关键不是看浏览器提示,而是验证整条链是否可被系统信任库回溯。
确认问题是否真由证书链中断引起
先排除常见误判:
- 用 openssl s_client -connect your-domain.com:443 -servername your-domain.com -showcerts 2>/dev/null 在Nginx服务器上直连自己,观察输出中 -----BEGIN CERTIFICATE----- 出现几次:仅1次 → 链不完整;2次或以上 → 链已发送,但可能中间证有过期
- 检查Nginx配置中 ssl_certificate 是否指向 fullchain.pem(含域名证书 + 中间证书),而非仅 cert.pem;若只配了 cert.pem,Nginx不会自动补全中间证书
- 对比错误日志:若出现 SSL certificate problem: unable to get local issuer certificate 或 self signed certificate in certificate chain,基本锁定为链缺失或根/中间证书失效
验证证书链是否能被系统信任库验证通过
即使链完整,若其中某个中间证书已过期或被吊销,系统就无法完成信任路径校验:
- 运行 openssl verify -CAfile /etc/ssl/certs/ca-certificates.crt /etc/nginx/ssl/fullchain.pem(路径按实际调整);返回 OK 表示整条链可信;若报 unable to get issuer certificate 或 certificate has expired,说明链中某张证书(通常是中间证书)已失效
- 单独查看中间证书有效期:从 fullchain.pem 中提取第二段(即第一个 -----BEGIN CERTIFICATE----- 之后、下一个之前的内容),保存为 intermediate.pem,再执行 openssl x509 -in intermediate.pem -noout -dates,确认 notAfter 时间是否早于当前(2026年10月1日)
- 检查系统CA证书包是否陈旧:sudo update-ca-certificates(Debian/Ubuntu)或 sudo trust extract-compat(RHEL/CentOS),避免因本地信任库未更新导致误判
检查 Nginx 是否加载了正确的证书链文件
配置正确 ≠ 实际生效,尤其在多环境、软链接或自动化部署场景下:
- 确认 ssl_certificate 和 ssl_certificate_key 路径在 server{} 块内,且文件真实存在:ls -l /etc/nginx/ssl/fullchain.pem
- 检查权限:证书文件建议 644,私钥必须 600;权限错误可能导致Nginx静默降级使用旧配置或默认证书
- 执行 sudo nginx -t 确保语法无误,再 sudo nginx -s reload;reload后用 curl -vI https://your-domain.com 2>&1 | grep "subject:" 或访问 SSL Labs 查看实际响应的证书链结构
- 若使用软链接(如 /etc/nginx/ssl/current.pem → live/example.com/fullchain.pem),检查链接目标是否仍指向已过期的旧版本目录
针对私有CA或自签名上游的特殊处理
如果Nginx作为反向代理访问的是内部HTTPS服务(如K8s API、gRPC后端),而该服务使用私有CA签发的证书,则需额外配置信任链:
- 确保 proxy_ssl_verify on; 启用时,配套设置了 proxy_ssl_trusted_certificate /path/to/private-ca-bundle.pem,且该文件中包含完整的私有CA证书链(中间证书在前,根证书在后)
- 该 proxy_ssl_trusted_certificate 文件与对外HTTPS的 ssl_certificate 完全无关,不能混用;它只用于校验后端,不影响用户访问
- 若上游证书链中某级CA已过期,必须由上游重新签发并提供新链,Nginx侧只需更新 proxy_ssl_trusted_certificate 指向的新bundle文件


















