“SSLCertVerificationError: certificate verify failed: unable to get local issuer certificate
时间: 2025-07-01 17:56:03 浏览: 43
在处理SSL证书验证失败问题时,尤其是遇到 `SSLCertVerificationError: certificate verify failed: unable to get local issuer certificate` 这类错误时,通常意味着Python无法找到系统的根证书或信任链不完整。以下是一些常见的解决方案:
### 1. 手动指定证书路径
在某些操作系统(如macOS)上,Python可能无法自动定位到系统的CA证书存储。可以通过手动指定证书文件的路径来解决此问题。例如,使用`certifi`包提供的Mozilla CA证书库[^2]:
```python
import ssl
import certifi
import urllib.request
context = ssl.create_default_context(cafile=certifi.where())
response = urllib.request.urlopen("https://example.com", context=context)
print(response.read().decode('utf-8'))
```
### 2. 忽略SSL证书验证(仅限测试环境)
对于开发或测试目的,可以临时禁用SSL证书验证以绕过此类错误,但这种方法不应在生产环境中使用,因为它会带来安全风险:
```python
import ssl
import urllib.request
context = ssl._create_unverified_context()
response = urllib.request.urlopen("https://example.com", context=context)
print(response.read().decode('utf-8'))
```
### 3. 更新Python的证书存储
在某些系统上,特别是macOS,Python自带的证书可能已过期或缺失。可以尝试更新Python使用的证书文件。运行以下命令将系统证书导出为PEM格式并替换Python使用的证书文件:
```bash
/Applications/Python\ 3.x/Install\ Certificates.command
```
这个脚本会安装最新的CA证书到Python环境中。
### 4. 使用`requests`库代替`urllib`
`requests`库提供了更简洁的接口,并且默认情况下会自动处理大多数SSL证书问题。如果出现问题,可以通过传递`verify`参数来控制证书验证行为:
```python
import requests
response = requests.get("https://example.com", verify="/path/to/cert.pem")
print(response.text)
```
若要忽略证书验证,可以设置`verify=False`,但这同样不推荐用于生产环境。
### 5. 检查系统时间和日期
SSL证书验证依赖于准确的时间戳。如果系统时间与证书颁发机构的时间不一致,也可能导致验证失败。确保系统时间和时区设置正确。
### 6. 安装缺失的根证书
如果目标服务器使用的是一个不太常见的CA签发的证书,则可能需要手动下载并安装该CA的根证书到信任库中。
通过上述方法之一,应该能够有效解决大部分由于本地颁发者证书缺失而导致的SSL验证失败问题。
阅读全文
相关推荐



















