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

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

本文详细解析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 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。