# 通过代理出现的 SSL CERTIFICATE_VERIFY_FAILED

> 通过代理抓取时出现 SSL CERTIFICATE_VERIFY_FAILED：过时的 CA 包、拦截性杀毒软件或公司防火墙、系统时钟错误。仅限安全的修复方案。

- URL: https://crawlrelay.com/zh/docs/errors/ssl-certificate-verify-failed/
- 最后更新: 2026-10-13
- Publisher: CrawlRelay (https://crawlrelay.com)

客户端的 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端口，详细模式）*

```bash
# 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:PASSWORD@gw.crawlrelay.com: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](https://crawlrelay.com/zh/docs/errors/ssl-wrong-version-number/) · [连接重置](https://crawlrelay.com/zh/docs/errors/connection-reset/) · [Python 指南](https://crawlrelay.com/zh/docs/python/)。

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

### 代理会导致 SSL 证书错误吗？

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

### verify=False 对抓取是否安全？

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

### 为什么 Docker 中失败，但我笔记本上能成功？

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

## 本参考中的其他代理错误

- [401 Unauthorized vs 407](https://crawlrelay.com/zh/docs/errors/401-unauthorized/)
- [403 Forbidden](https://crawlrelay.com/zh/docs/errors/403-forbidden/)
- [407 Proxy Authentication Required](https://crawlrelay.com/zh/docs/errors/407-proxy-authentication-required/)
- [429 Too Many Requests](https://crawlrelay.com/zh/docs/errors/429-too-many-requests/)
- [502 Bad Gateway](https://crawlrelay.com/zh/docs/errors/502-bad-gateway/)
- [503 Service Unavailable](https://crawlrelay.com/zh/docs/errors/503-service-unavailable/)
- [504 Gateway Timeout](https://crawlrelay.com/zh/docs/errors/504-gateway-timeout/)
- [Cannot connect to proxy (ProxyError)](https://crawlrelay.com/zh/docs/errors/cannot-connect-to-proxy/)
- [Connection reset by peer (ECONNRESET)](https://crawlrelay.com/zh/docs/errors/connection-reset/)
- [ERR_PROXY_CONNECTION_FAILED](https://crawlrelay.com/zh/docs/errors/err-proxy-connection-failed/)
- [ERR_TUNNEL_CONNECTION_FAILED](https://crawlrelay.com/zh/docs/errors/err-tunnel-connection-failed/)
- [Read timed out (ReadTimeout)](https://crawlrelay.com/zh/docs/errors/read-timeout/)
- [SOCKS5 proxy errors](https://crawlrelay.com/zh/docs/errors/socks5-proxy-errors/)
- [SSL: CERTIFICATE_VERIFY_FAILED](https://crawlrelay.com/zh/docs/errors/ssl-certificate-verify-failed/)
- [SSL: WRONG_VERSION_NUMBER](https://crawlrelay.com/zh/docs/errors/ssl-wrong-version-number/)

**带有涵盖失败案例文档的住宅代理** 来自US$0.50/GB的CrawlRelay住宅代理，流量永不过期。 [查看价格](https://crawlrelay.com/zh/pricing/) · [快速开始](https://crawlrelay.com/zh/docs/)

---

CrawlRelay: CrawlRelay 是为开发者设计的住宅代理和 4G/5G 移动代理轮换服务，适用于爬虫和 AI 数据管道：按需付费且流量永不过期，最低流量从 US$0.50/GB 起，支持加密货币支付，无需上传身份证明。无需 KYC —— 无需身份证、自拍和任何证件。支持加密货币支付。
