You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Nginx反向代理HTTPS上游证书验证错误(20:无法获取本地颁发者证书)

解决Nginx反向代理HTTPS上游证书验证失败的问题

看起来你已经做了不少扎实的准备工作:自建CA、给上游服务器签发证书、把CA证书加入系统根证书库,甚至curl和openssl都能正常验证上游证书,但Nginx偏偏报unable to get local issuer certificate错误,这确实有点挠头。我来帮你梳理几个可能的排查方向:

1. 确认CA证书的正确性与格式

首先要确保/etc/nginx/ca.pem里的CA证书,和上游服务器证书的签发者完全匹配。你可以用以下命令对比:

  • 查看CA证书的主体信息:
openssl x509 -in /etc/nginx/ca.pem -noout -subject
  • 对比你提供的openssl s_client结果里的issuer字段:/C=CY/ST=CY/L=CY/O=TEST.TEST/CN=test.test/emailAddress=admin@test.test

如果两者不一致,说明你指定的CA证书不是签发上游证书的那根,赶紧替换成正确的CA证书。另外要确保CA证书是标准PEM格式,没有多余的空白行或乱码,内容严格从-----BEGIN CERTIFICATE-----开始,到-----END CERTIFICATE-----结束。

2. 检查Nginx对CA证书的访问权限

Nginx运行的用户(通常是nginx或www-data)必须能读取/etc/nginx/ca.pem文件。可以执行以下命令设置正确的权限:

chown nginx:nginx /etc/nginx/ca.pem
chmod 644 /etc/nginx/ca.pem

如果你的服务器开启了SELinux,可能还需要调整文件的安全上下文:

restorecon -v /etc/nginx/ca.pem

3. 开启SNI支持(针对IP证书的特殊场景)

虽然你的上游证书CN是IP地址,但有些情况下Nginx代理时不发送SNI会导致证书验证异常。可以在Nginx配置里添加:

proxy_ssl_server_name on;

这个指令会让Nginx在和上游建立SSL连接时发送SNI信息,确保上游返回正确的证书链。

4. 验证Nginx配置并重启服务

修改配置后,一定要先验证语法是否正确,再重启Nginx让配置生效:

nginx -t
systemctl restart nginx

很多时候配置修改后没生效,就是因为忘记重启服务了。

5. 确认proxy_ssl_verify_depth的合理性

你的上游证书链是:服务器证书(depth=0)→ CA证书(depth=1),所以proxy_ssl_verify_depth 1是完全正确的,不需要调整。如果设为0会跳过根CA验证,反而不安全,保持当前设置即可。

额外排查:用Nginx依赖的openssl库模拟验证

如果以上步骤都没解决问题,可以用Nginx依赖的openssl库直接测试证书验证,模拟Nginx的行为:

openssl s_client -connect 1.1.1.1:8000 -CAfile /etc/nginx/ca.pem

如果这个命令返回Verify return code: 0 (ok),说明CA证书本身没问题,问题出在Nginx配置或权限上;如果返回错误,那就是CA证书本身的问题了。

按照这些步骤排查下来,应该能解决你的证书验证问题。

内容的提问来源于stack exchange,提问作者VelDev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 06:50:51