urllib3.exceptions.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1028)
时间: 2025-06-06 08:39:36 浏览: 21
### urllib3 SSLError CERTIFICATE_VERIFY_FAILED解决方案
当遇到 `urllib3.exceptions.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED]` 错误时,这通常是因为 Python 在尝试通过 HTTPS 请求数据时无法验证目标服务器的 SSL 证书。以下是几种常见的解决方法:
#### 方法一:更新 CA 证书
Python 使用内置的 CA 证书来验证远程服务器的身份。如果这些证书过期或缺失,则可能导致此问题。可以通过安装最新的 CA 证书包解决问题。
```bash
pip install certifi --upgrade
```
完成升级后,可以手动指定 `certifi` 提供的 CA 文件路径作为请求中的参数[^3]:
```python
import requests
import certifi
response = requests.get('https://example.com', verify=certifi.where())
print(response.text)
```
---
#### 方法二:禁用 SSL 验证
虽然不推荐在生产环境中使用这种方法,但在开发阶段或者测试场景下,可以选择关闭 SSL 验证以绕过该错误。需要注意的是,这样做会降低安全性并使通信容易受到中间人攻击。
对于 `urllib3` 来说,可以直接设置 `verify=False` 参数:
```python
import urllib3
http = urllib3.PoolManager()
response = http.request('GET', 'https://example.com', timeout=10, retries=3, headers={}, fields=None, **{'cert_reqs': 'CERT_NONE'})
print(response.data.decode('utf-8'))
```
同样地,在 `requests` 库中也可以实现类似功能[^5]:
```python
import requests
response = requests.get('https://example.com', verify=False)
print(response.text)
```
注意:为了抑制警告消息,还可以导入 `urllib3.disable_warnings()` 并调用它:
```python
from urllib3 import disable_warnings, exceptions
disable_warnings(exceptions.InsecureRequestWarning)
```
---
#### 方法三:创建未验证的 SSL 上下文 (仅限特定情况)
另一种方式是利用标准库模块 `ssl` 创建一个忽略证书校验的上下文对象,并将其传递给网络请求函数[^4]:
```python
import ssl
import urllib.request
context = ssl._create_unverified_context()
req = urllib.request.Request('https://example.com')
with urllib.request.urlopen(req, context=context) as response:
html = response.read().decode('utf-8')
print(html)
```
这种方式适用于某些低级别的 HTTP 客户端操作,但对于更复杂的项目建议优先考虑其他替代方案。
---
#### 方法四:修改源码(谨慎)
如果是在特殊环境下工作(比如 Ascend),可能需要调整第三方依赖项内部逻辑才能彻底消除异常行为。例如编辑 `sessions.py` 文件并将默认值改为 `False` 可能是一个临时措施[^5]。不过这种做法存在风险,因为一旦重新安装软件包就会覆盖更改内容。
因此除非万不得已否则不要轻易改动官方发行版本代码!
---
### 总结
综上所述,针对不同需求可采取多种策略应对 `[SSL: CERTIFICATE_VERIFY_FAILED]` 报错现象。从长远来看维护最新版环境以及正确配置信任链是最理想的选择;而在短期应急处理过程中则允许适当放宽约束条件以便继续执行流程[^2].
阅读全文
相关推荐













