解决Python访问HTTPS时SSL证书验证失败的多种方案

雨后青山
雨后青山
发布时间:2026-10-14 | 2人浏览过
原创

本文详细解析Python在访问HTTPS链接时出现[SSL: CERTIFICATE_VERIFY_FAILED]错误的原因,即Python 2.7.9+默认开启证书校验。文章提供了五种临时解决方案,包括环境变量设置、全局禁用验证、创建未验证Context、requests库verify参数设为False以及手动指定CA证书,帮助开发者快速处理自签名证书或系统根证书异常导致的连接问题。

HTTPS SSL证书验证失败原因解析

在通过urllib访问HTTPS链接时,可能会遇到如下报错:IOError: [Errno socket error] [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:727)。该错误表明证书验证未通过,通常发生在网站使用自签名证书或系统根证书存在异常的情况下。

原因分析

自Python 2.7.9版本起,默认启用了服务器证书验证功能。若证书校验失败,程序将拒绝后续操作,此举旨在防止中间人攻击并确保客户端确认服务器身份。当使用自签名证书时,由于系统CA证书库中通常不包含该自签名CA的内容,导致验证失败。

Python访问HTTPS的临时解决方案

临时解决方案

方案一:通过环境变量关闭服务器证书验证

若使用bash shell,可执行以下命令:

echo "export PYTHONHTTPSVERIFY=0" >> ~/.bashrc

source ~/.bashrc

方案二:全局取消服务器证书验证

在代码文件开头添加以下语句:

import ssl

ssl._create_default_https_context = ssl._create_unverified_context

方案三:创建取消验证的Context参数(仅影响当前请求)

具体使用示例如下:


import ssl
context = ssl._create_unverified_context()
urllib.urlopen('https://www.baidu.com', context=context)

方案四:在requests库中将verify参数设为False以取消验证

使用示例如下:

requests.get(url, verify=False)

方案五:手动指定CA证书(适用于Python3)

使用示例如下:

import urllib

urllib.request.urlopen("https://example.com/some/info", cafile="ca.pem")

若系统根证书存在问题,可使用certifi提供的CA证书:


import certifi
import urllib
urllib.request.urlopen('https://example.com/bar/baz.html', cafile=certifi.where())

Python3关闭SSL验证补充说明

补充知识:Python3关闭SSL证书验证

常见报错信息如下:

Traceback (most recent call last): File "D:\Python36\lib\site-packages\urllib3\contrib\pyopenssl.py", line 441, in wrap_socket cnx.do_handshake() File "D:\Python36\lib\site-packages\OpenSSL\SSL.py", line 1806, in do_handshake self._raise_ssl_error(self._ssl, result) File "D:\Python36\lib\site-packages\OpenSSL\SSL.py", line 1546, in _raise_ssl_error _raise_current_error() File "D:\Python36\lib\site-packages\OpenSSL\_util.py", line 54, in exception_from_error_queue raise exception_type(errors) OpenSSL.SSL.Error: [('SSL routines', 'tls_process_server_certificate', 'certificate verify failed')]

During handling of the above exception, another exception occurred:

https://aweme.snssdk.com/aweme/v1/play/?video_id=v0200f180000bc4e71kd1dr48pievrrg&line=0&app_id=24

由于网址使用了https,经过代理时可能会触发上述报错;

解决方案:


#参数:verify=False
html = requests.get(item_url, headers=headers, verify=False)
# print(html.content)

以上为解决Python访问HTTPS时出现certificate verify failed问题的全部方法,供参考。

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表