certificate verify failed: unable to get local issuer certificate (_ssl.c:10

出现 "certificate verify failed: unable to get local issuer certificate (_ssl.c:10)" 这个错误通常是因为Python在尝试建立HTTPS连接时,无法验证服务器的SSL证书。这可能是因为本地系统中缺少必要的根证书,或者服务器的证书链不完整,导致Python无法找到颁发服务器证书的CA(证书颁发机构)的根证书。以下是一些解决这个问题的步骤:

  1. 确认错误来源

    首先确认这个错误是在使用哪个库(如requests、urllib等)进行HTTPS请求时发生的。这有助于确定后续解决方案的具体应用。

  2. 检查证书配置

    ‌系统证书‌:确保你的操作系统已经安装了最新的CA根证书。不同的操作系统有不同的管理方式,例如在Windows中可以通过更新系统或使用证书管理工具来管理。

    ‌Python环境‌:如果你使用的是特定版本的Python(特别是通过包管理器如Homebrew安装的),可能需要单独配置Python的证书路径。

  3. 更新证书存储

    如果确定系统证书已经是最新的,但问题依旧存在,可能需要手动更新或安装Python的证书存储。对于Python,可以使用certifi库来更新或指定证书。

python

Copy Code

使用certifi库指定证书

import certifi

import requests

response = requests.get('https://example.com', verify=certifi.where())

  1. 验证证书链

确保服务器提供的证书链是完整的,并且证书链中的每个证书都可以被验证到一个受信任的根证书。你可以使用浏览器或其他工具(如OpenSSL)来检查服务器的证书链。

  1. 调试或绕过验证(仅在开发环境中)
    如果以上方法都无法解决问题,并且你确信当前的网络环境是安全的(例如,在内部开发网络中),你可以考虑在开发环境中暂时禁用SSL验证。但请注意,这仅应在开发环境中进行,且在生产环境中必须保持验证开启。

禁用SSL验证(不推荐用于生产环境)

‌对于requests库‌:

cpp 复制代码
python
Copy Code
import requests

response = requests.get('https://example.com', verify=False)

‌对于urllib库‌:

cpp 复制代码
python
Copy Code
import ssl
import urllib.request

context = ssl._create_unverified_context()
response = urllib.request.urlopen('https://example.com', context=context)

请注意,这些解决方案中的禁用SSL验证会使你的应用程序容易受到中间人攻击,因此仅应在完全受控和信任的环境中使用。

总结

遇到 "certificate verify failed: unable to get local issuer certificate" 错误时,首先确认错误来源,然后检查并更新证书配置,确保服务器提供的证书链完整且可验证。如果问题依旧存在,可以考虑在开发环境中暂时禁用SSL验证,但务必注意其安全风险。

相关推荐
苏十八2 分钟前
计算机网络相关知识小结
服务器·网络·计算机网络
lilye661 小时前
程序化广告行业(42/89):预警机制与广告优化全解析
网络·oracle·时序数据库
独家回忆3641 小时前
网络原理-TCP/IP
网络·网络协议·tcp/ip
腾讯安全应急响应中心2 小时前
命悬生死线:当游戏遭遇DDoS围剿,如何用AI破局?
网络·人工智能·游戏·ddos
残诗3 小时前
ar头显和眼镜图像特效处理
网络·网络协议
。puppy4 小时前
HCIA—— 31 HTTP的报文、请求响应报文、方法、URI和URL
网络·网络协议·http
为什么要内卷,摆烂不香吗4 小时前
HCIP之VRRP
网络
技术小齐4 小时前
网络运维学习笔记(DeepSeek优化版)026 OSPF vlink(Virtual Link,虚链路)配置详解
运维·网络·学习
无职转生真好看4 小时前
HTTP和HTTPS区别
网络协议·http·https