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验证,但务必注意其安全风险。

相关推荐
suzhou_speeder4 分钟前
网络交换机:构建高效、安全、灵活局域网的基石
网络·安全·交换机·poe·poe交换机
Amo Xiang28 分钟前
计算机网络第1章(上):网络组成与三种交换方式全解析
网络·计算机网络
搬码临时工29 分钟前
什么是内网映射?如何将内网ip映射到外网访问?
运维·服务器·网络·网络协议·tcp/ip·智能路由器
链上Sniper1 小时前
高并发区块链系统实战:从架构设计到性能优化
开发语言·网络·python·性能优化·架构·区块链·php
追寻1 小时前
知识拓展卡————————关于Access、Trunk、Hybrid端口
网络·网络协议·计算机网络·信息与通信
小疆智控1 小时前
协议融合驱动效能跃升:Modbus转Ethernet IP的挤出吹塑机应用
网络·网络协议·tcp/ip
weixin_440401691 小时前
本地IP配置
网络·网络协议·tcp/ip
链上Sniper1 小时前
NFT 市场开发:基于 Ethereum 和 IPFS 构建去中心化平台
开发语言·网络·架构·去中心化·区块链·php
链上Sniper2 小时前
区块链跨链通信:使用 Cosmos SDK 实现链间互操作
开发语言·网络·架构·区块链·php
chian-ocean2 小时前
从OSI到TCP/IP:网络协议的演变与作用
网络·网络协议·tcp/ip