admin管理员组文章数量:1442359
修复SSL证书链不完整问题certificate verify failed unable to get local issuer certificate
前言
- 最近,我在服务器上更新了 SSL 证书后,虽然网站可以正常访问,浏览器显示证书有效,但在部分文章平台引用服务器上的图片时,图片无法被转存。
- 排查过程中使用 Python 代码尝试下载图片时,报错如下,怀疑是 SSL 证书链不完整:
SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate')
- 进一步使用 SSL Labs Server Test 进行验证,发现服务器的证书链确实不完整,导致部分客户端无法正确验证 SSL 证书。最终通过调整 Nginx 的 SSL 配置 解决了这个问题。本文将详细介绍 如何排查和解决 SSL 证书更新后图片无法转存的问题。
排查过程
怀疑文章平台图片转存问题
- 在部分文章发布平台上,我们尝试将服务器上的图片转存到平台的存储系统,但始终失败。
- 为了排除文章发布平台的潜在问题,我测试了 非本服务器的其他图片地址,发现这些图片可以成功转存。这表明 问题出在本服务器,而不是文章平台的转存机制。
尝试使用 Python 代码下载图片
- 怀疑是 Nginx 服务器 SSL 证书配置问题,为了进一步验证猜想使用 Python 代码直接下载服务器上的图片,代码如下:
import requests
url = "https://xxxx/temp-photos/U0AUapam9u.png"
response = requests.get(url)
if response.status_code == 200:
with open("image.png", "wb") as f:
f.write(response.content)
print("图片转存成功")
else:
print("图片转存失败")
# 出现如下报错:
SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate')
- 错误表明 Python 无法验证服务器的 SSL 证书,通常是因为 服务器的证书链不完整,导致某些客户端无法正确验证证书。
使用 SSL Labs Server Test 验证猜想
- 为了进一步验证猜想,我使用 SSL Labs Server Test 对服务器的 SSL 证书进行检测,结果显示:
This server's certificate chain is incomplete. Grade capped to B.
- 错误表明服务器 没有提供完整的证书链,导致某些客户端(如 Python requests、文章平台的图片转存服务)无法正确验证 SSL 证书。
- 当然我们可以使用
verify=False
忽略证书校验下载,但是当前场景我们无法使用该方案,也是一个治标不治本的方案。
回顾 SSL 安装命令
- 安装的证书仅包含本域名,没有使用完整的证书链。
acme.sh --install-cert -d xxxx \
--key-file /root/nginx/conf/conf.d/xxxx.key \
--cert-file /root/nginx/conf/conf.d/xxxx.cer \
--reloadcmd "docker container restart nginx"
- 修复后命令,使用完整证书链
--fullchain-file
:
acme.sh --install-cert -d xxxx \
--key-file /root/nginx/conf/conf.d/xxxx.key \
--fullchain-file /root/nginx/conf/conf.d/xxxx.cer \
--reloadcmd "docker container restart nginx"
ACME 生成的证书
验证
使用 SSL Labs Server Test 验证
- 检测结果正常
文章发布平台转存验证
- 正常转存
个人简介
本文标签: 修复SSL证书链不完整问题certificate verify failed unable to get local issuer certificate
版权声明:本文标题:修复SSL证书链不完整问题certificate verify failed unable to get local issuer certificate 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/biancheng/1748012405a2790338.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论