无需 KYC —— 无需身份证、自拍、文件证明。支持加密货币支付:BTC, USDT, USDC, ETH, SOL, LTC
语言: 简体中文
开始使用

代理错误参考 · 连接和 TLS 错误

通过代理出现的 SSL CERTIFICATE_VERIFY_FAILED

客户端的 TLS 证书错误:每个工具中的精确错误信息、可能原因排序及有效解决方案。

最后更新:

快速回答

代理中的SSL: CERTIFICATE_VERIFY_FAILED是什么意思?

CERTIFICATE_VERIFY_FAILED 意味着您的客户端无法验证网站的 TLS 证书。通过像 CrawlRelay 网关这样的 CONNECT 代理,TLS 是端到端的,因此代理不会引起该问题。请检查您这边:过期的 CA 包、杀毒软件或检查 HTTPS 的公司防火墙,或者系统时钟错误。切勿在生产环境中用 verify=False 来修复。

SSL: CERTIFICATE_VERIFY_FAILED一览

错误SSL: CERTIFICATE_VERIFY_FAILED
类型客户端的 TLS 证书错误
发送方当您的 TLS 库无法验证网站的证书时
定义于X.509 path validation: RFC 5280; TLS 1.3: RFC 8446
要重试吗?否。修复信任存储或网络
先检查在同一台机器上无需代理测试相同的 URL

SSL: CERTIFICATE_VERIFY_FAILED是什么意思?

在 TLS 握手期间,网站会发送证书链。您的客户端会将它与受信任机构列表(信任存储)核对,并检查名称和日期。如果任何检查失败,则会停止。

通过 CONNECT 隧道,代理会原样转发握手内容,因此您看到的证书就是网站本身的。通常造成问题的是插入了自身证书的检测软件,或您机器上的陈旧信任存储。

在Python、curl、Node.js和浏览器中CERTIFICATE_VERIFY_FAILED是什么样?

每个工具中相同的失败会有不同的提示信息。请在日志中搜索以下信息:

  • Python: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate
  • Node.js: UNABLE_TO_GET_ISSUER_CERT_LOCALLY 或 SELF_SIGNED_CERT_IN_CHAIN
  • curl: curl: (60) SSL certificate problem: unable to get local issuer certificate
  • 浏览器: NET::ERR_CERT_AUTHORITY_INVALID

导致CERTIFICATE_VERIFY_FAILED的原因是什么?

最可能的首要原因:

  • 过时的 CA 包,例如 Python 中的旧版 certifi 包。
  • 由杀毒软件、公司防火墙或调试代理执行的 HTTPS 检测,它们会使用自己的证书。
  • 系统时钟错误,使得有效证书看起来已过期或尚未生效。
  • 证书链断裂的网站,缺少中间证书。
  • 无系统 CA 证书包的容器镜像。

如何一步步诊断CERTIFICATE_VERIFY_FAILED?

  1. 在无需代理的情况下运行相同请求。如果仍失败,说明代理无关。
  2. 用 openssl s_client 或 curl -v 打印证书颁发者:若颁发者名字是您的杀毒或防火墙,说明被拦截。
  3. 检查系统日期和时间。
  4. 更新 CA 包并再次测试。
用curl测试失败的URL(HTTP端口,详细模式)
# Use the URL that fails; with https://api.ipify.org instead, you test the gateway alone.
# "HTTP/1.1 200 Connection established" first, then the site's own status: the site answered.
curl -v -x http://USERNAME:[email protected]:7777 https://TARGET_URL

# Same test through the SOCKS5 port, with DNS resolved at the exit
curl -v --socks5-hostname gw.crawlrelay.com:7778 --proxy-user USERNAME:PASSWORD https://TARGET_URL

如何修复CERTIFICATE_VERIFY_FAILED?

  • 更新 certifi(pip install -U certifi)或系统 CA 包。
  • 如网络需要检测,添加公司检测证书到信任存储,或在不经过该网络的环境中运行爬虫。
  • 用网络时钟同步修正系统时钟。
  • 在轻量容器镜像中安装 CA 证书包,例如 ca-certificates 包。
  • 不要在发送凭证或采集关键数据的代码中禁用验证。

遇到CERTIFICATE_VERIFY_FAILED后要重试吗?

不要重试:相同的信任存储会一再失败。修复信任存储、时钟或网络路径后再运行。

SSL: CERTIFICATE_VERIFY_FAILED如何应用于CrawlRelay?

CrawlRelay 的 HTTP 端口通过 CONNECT 隧道传递 HTTPS,因此客户端验证的证书即为网站自身。如果错误只通过网关出现,且无代理时不出现,请提供目标主机名和完整错误联系支持,我们将检查出口。

网关:gw.crawlrelay.com,端口7777(通过CONNECT的HTTP、HTTPS)和端口7778(SOCKS5)。用户名格式:USERNAME-country-{cc}-state-{state}-city-{city}-zip-{zip}-asn-{asn}-session-{id}-ttl-{minutes}。相关内容:SSL: WRONG_VERSION_NUMBER · 连接重置 · Python 指南。

SSL: CERTIFICATE_VERIFY_FAILED:开发者常问的问题

代理会导致 SSL 证书错误吗?

拦截代理会导致,因为它会用自己的证书代替。CONNECT 隧道代理不会,因为它只转发加密字节,永远不接触握手内容。无需代理运行相同请求:若错误依旧,原因在您的机器或网络。

verify=False 对抓取是否安全?

不作为修复方法。它隐藏了拦截和链断,攻击者可能读取或篡改您的流量,包括令牌和 Cookie。仅用于快速本地测试,切勿在无人值守任务或发送凭证时使用。

为什么 Docker 中失败,但我笔记本上能成功?

轻量容器镜像常不含 CA 证书,无法验证证书。请安装系统 CA 包,或依赖 Python 的 certifi 包。也请检查容器系统时钟是否正确。

本参考中的其他代理错误

HTTP 状态码

浏览器和客户端错误

连接和 TLS 错误

带有涵盖失败案例文档的住宅代理

来自US$0.50/GB的CrawlRelay住宅代理,流量永不过期。

从 US$0.50/GB 开始 · 无需 KYC

开始使用