【Bug已解决】openclaw SSL certificate verification failed — OpenClaw SSL 证书验证失败解决方案
【Bug已解决】openclaw: SSL certificate verification failed / CERTIFICATE_VERIFY_FAILED — OpenClaw SSL 证书验证失败解决方案1. 问题描述OpenClaw 在连接 API 时 SSL 证书验证失败# SSL 证书验证失败 $ openclaw task Error: SSL: CERTIFICATE_VERIFY_FAILED certificate verify failed: unable to get local issuer certificate. # 或自签名证书 $ openclaw --print task Error: SSLError [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed. # 或证书链不完整 $ openclaw task Error: certificate chain incomplete unable to verify the first certificate. # 或过期证书 $ openclaw task Error: certificate has expired The server certificate expired on 2024-01-01.这个问题在以下场景中特别常见企业安全网关替换证书自签名证书证书链不完整ca-certificates 过期Python 证书存储问题系统时间不正确2. 原因分析原因分类表原因分类具体表现占比企业安全网关证书替换约 35%ca-certificates 过期旧证书约 25%证书链不完整中间证书约 15%Python 证书certifi约 10%系统时间时间错误约 10%自签名无 CA约 5%3. 解决方案方案一更新 ca-certificates最推荐# 步骤 1更新系统证书 # macOS brew install ca-certificates brew link ca-certificates # Ubuntu/Debian sudo apt update sudo apt install --reinstall ca-certificates # 步骤 2更新 Python 证书 pip install --upgrade certifi # 步骤 3验证 python3 -c import certifi; print(certifi.where()) # 步骤 4测试 openclaw --print hello方案二设置证书路径# 步骤 1找到证书路径 python3 -c import certifi; print(certifi.where()) # 通常: /usr/local/lib/python3.12/site-packages/certifi/cacert.pem # 步骤 2设置环境变量 export SSL_CERT_FILE$(python3 -c import certifi; print(certifi.where())) export REQUESTS_CA_BUNDLE$(python3 -c import certifi; print(certifi.where())) # 步骤 3永久设置 echo export SSL_CERT_FILE$(python3 -c import certifi; print(certifi.where())) ~/.bashrc source ~/.bashrc # 步骤 4验证 openclaw --print hello方案三添加企业证书# 步骤 1获取企业证书 # 从 IT 部门获取企业根证书company-ca.pem # 步骤 2添加到证书存储 cat company-ca.pem $(python3 -c import certifi; print(certifi.where())) # 步骤 3或添加到系统证书 sudo cp company-ca.pem /usr/local/share/ca-certificates/company-ca.crt sudo update-ca-certificates # Linux # 步骤 4验证 openclaw --print hello方案四检查系统时间# 步骤 1检查系统时间 date # 步骤 2如果时间错误 sudo ntpdate ntp.org # 或 sudo systemsetup -setusingnetworktime on # macOS # 步骤 3验证 date # 步骤 4测试 openclaw --print hello方案五使用 --insecure不推荐# 步骤 1跳过 SSL 验证仅用于调试 export OPENCLAW_SSL_VERIFYfalse # 步骤 2或 export PYTHONHTTPSVERIFY0 # 步骤 3测试 openclaw --print hello # 步骤 4警告 # 不推荐长期使用有安全风险方案六检查证书链完整性# 步骤 1用 openssl 检查证书链 echo | openssl s_client -connect api.anthropic.com:443 -showcerts 2/dev/null | head -30 # 步骤 2检查证书有效期 echo | openssl s_client -connect api.anthropic.com:443 2/dev/null \ | openssl x509 -noout -dates # 步骤 3验证证书链 echo | openssl s_client -connect api.anthropic.com:443 2/dev/null \ | openssl x509 -noout -text | grep -A2 Authority # 步骤 4如果中间证书缺失手动下载并追加 # 从证书颁发机构官网下载中间证书追加到 cacert.pem cat intermediate-ca.pem $(python3 -c import certifi; print(certifi.where())) openclaw --print hello4. 各方案对比总结方案适用场景推荐指数难度方案一更新证书通用⭐⭐⭐⭐⭐低方案二设置路径Python⭐⭐⭐⭐⭐低方案三企业证书企业⭐⭐⭐⭐⭐中方案四系统时间时间⭐⭐⭐⭐⭐低方案五--insecure临时⭐低方案六证书链检查证书链⭐⭐⭐⭐中5. 常见问题 FAQ5.1 CERTIFICATE_VERIFY_FAILED 是什么SSL 证书验证失败。无法验证服务器证书的有效性。5.2 如何更新证书pip install --upgrade certifi sudo apt install --reinstall ca-certificates5.3 企业安全网关导致问题企业安全网关可能替换 TLS 证书。获取企业根证书添加到证书存储。5.4 如何设置证书路径export SSL_CERT_FILE$(python3 -c import certifi; print(certifi.where()))5.5 系统时间影响证书证书有有效期。系统时间错误会导致证书验证失败。5.6 --insecure 安全吗不安全。仅用于调试不要长期使用。5.7 如何添加企业证书cat company-ca.pem $(python3 -c import certifi; print(certifi.where()))5.8 certifi 是什么Python 的 CA 证书包用于 SSL 验证。5.9 证书过期怎么办更新 ca-certificates 和 certifi。5.10 排查清单速查表□ 1. pip install --upgrade certifi □ 2. sudo apt install --reinstall ca-certificates □ 3. export SSL_CERT_FILE$(python3 -c import certifi; print(certifi.where())) □ 4. export REQUESTS_CA_BUNDLE同上 □ 5. 添加企业证书到 certifi □ 6. date 检查系统时间 □ 7. sudo ntpdate 修正时间 □ 8. curl --cacert 测试证书 □ 9. OPENCLAW_SSL_VERIFYfalse 临时跳过 □ 10. openssl s_client 检查证书链完整性6. 总结根本原因SSL 验证失败最常见原因是企业安全网关替换证书35%和 ca-certificates 过期25%最佳实践pip install --upgrade certifi更新 Python 证书证书路径export SSL_CERT_FILE$(python3 -c import certifi; print(certifi.where()))企业证书从 IT 获取企业根证书添加到 certifi 证书包最佳实践建议检查系统时间更新 ca-certificates不要使用 --insecure故障排查流程图flowchart TD A[SSL 验证失败] -- B[更新证书] B -- C[pip install --upgrade certifi] C -- D[sudo apt install ca-certificates] D -- E[openclaw --print hello 验证] E -- F{成功?} F --|是| G[✅ 问题解决] F --|否| H[检查系统时间] H -- I[date] I -- J{时间正确?} J --|否| K[sudo ntpdate 修正] J --|是| L[设置证书路径] K -- E L -- M[export SSL_CERT_FILEcertifi] M -- N[export REQUESTS_CA_BUNDLEcertifi] N -- E E -- O{成功?} O --|是| G O --|否| P{企业安全网关?} P --|是| Q[获取企业证书] Q -- R[cat company-ca.pem certifi] R -- E P --|否| S[检查证书链] S -- T[openssl s_client -showcerts] T -- U[追加缺失中间证书] U -- E S --|否| V[临时跳过验证] V -- W[OPENCLAW_SSL_VERIFYfalse] W -- E G -- AA[长期: 更新证书 设置路径 企业 CA] AA -- AB[✅ 长期方案]