Python解决certificate verify failed: unable to get local issuer certificate

当使用requests.get进行HTTPS请求时遇到证书验证失败的问题,可以通过设置verify=False规避。但如果在第三方库中无法传入该参数,可以设置环境变量REQUESTS_CA_BUNDLE和CURL_CA_BUNDLE为空,并禁用urllib3的警告。然而,这种方法在requests版本2.28.2及以上可能无效。

Python程序调用requests.get(‘https://www.youkuaiyun.com/’)获取网页内容时可能会出现异常:certificate verify failed: unable to get local issuer certificate。此时可以传verify参数为False解决问题,即 requests.get(‘https://www.youkuaiyun.com/’,verify=False)。

如果调用的是第三方库,没有办法传verify参数,则可以在代码最开始地方加入如下设置:

import os
import urllib3

os.environ.setdefault('REQUESTS_CA_BUNDLE', '')
os.environ.setdefault('CURL_CA_BUNDLE', '')
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)

此方法在requests版本为2.27.1时有效,升级到2.28.2时就没有效了。

在处理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验证失败问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值