解决python打开https出现certificate verify failed的问题


Posted in Python onSeptember 03, 2020

今天遇到一个奇怪的问题,在用urllib打开一个https链接的时候,出现了一下报错信息:IOError: [Errno socket error] [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:727),报错问题就是证书验证失败,这种情况出现在网站使用的是自签名证书或系统根证书存在问题的时候。

原因:

Python 从 2.7.9版本开始,就默认开启了服务器证书验证功能,如果证书校验不通过,则拒绝后续操作;这样可以防止中间人攻击,并使客户端确保服务器确实是它声称的身份。如果是自签名证书,由于一般系统的CA证书中不存在在自签名的CA证书内容,从而导致证书验证不通过。

临时解决方案

方案1:通过环境部变量设置,关闭服务器证书验证功能

执行以下shell命令(假设你使用的是bash shell):

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

source ~/.bashrc

方案2:取消服务器证书验证功能(全局影响)

在文件开始部分,加入如下代码:

import ssl

ssl._create_default_https_context = ssl._create_unverified_context

方案3:创建取消服务器证书验证的context参数(当前请求代码影响)

使用示例如下:

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

方案4:requests verify 参数设置为False,取消验证功能

使用示例如下:

requests.get(url, verify=False)

方案5:手动指定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证书验证

报错信息:

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 相关文章推荐
python构造icmp echo请求和实现网络探测器功能代码分享
Jan 10 Python
简单上手Python中装饰器的使用
Jul 12 Python
Python 实现简单的shell sed替换功能(实例讲解)
Sep 29 Python
Python实现matplotlib显示中文的方法详解
Feb 06 Python
Tornado实现多进程/多线程的HTTP服务详解
Jul 25 Python
seek引发的python文件读写的问题及解决
Jul 26 Python
python实现登录密码重置简易操作代码
Aug 14 Python
Python中__repr__和__str__区别详解
Nov 07 Python
tensorflow 获取所有variable或tensor的name示例
Jan 04 Python
使用PyTorch训练一个图像分类器实例
Jan 08 Python
python软件测试Jmeter性能测试JDBC Request(结合数据库)的使用详解
Jan 26 Python
Python数据分析之绘图和可视化详解
Jun 02 Python
详解torch.Tensor的4种乘法
Sep 03 #Python
详解pytorch tensor和ndarray转换相关总结
Sep 03 #Python
python开发入门——列表生成式
Sep 03 #Python
Pytorch之Tensor和Numpy之间的转换的实现方法
Sep 03 #Python
Python 多线程C段扫描、检测 Ping扫描脚本的实现
Sep 03 #Python
Python开发入门——迭代的基本使用
Sep 03 #Python
Python 整行读取文本方法并去掉readlines换行\n操作
Sep 03 #Python
You might like
php使用正则验证中文
2016/04/06 PHP
php+mysql实现简单登录注册修改密码网页
2016/11/30 PHP
PHP实现权限管理功能示例
2017/09/22 PHP
如何用javascript判断录入的日期是否合法
2007/01/08 Javascript
javascript concat数组累加 示例
2009/09/03 Javascript
js过滤数组重复元素的方法
2010/09/05 Javascript
把input初始值不写value的具体实现方法
2013/07/04 Javascript
使用Nodejs开发微信公众号后台服务实例
2014/09/03 NodeJs
在JavaScript中操作时间之getUTCDate()方法的使用
2015/06/10 Javascript
js实现简洁大方的二级下拉菜单效果代码
2015/09/01 Javascript
javascript对象的创建和访问
2016/03/08 Javascript
简述JavaScript提交表单的方式 (Using JavaScript Submit Form)
2016/03/18 Javascript
canvas绘图不清晰的解决方案
2017/02/28 Javascript
AngularJS之自定义服务详解(factory、service、provider)
2017/04/14 Javascript
微信小程序实现的涂鸦功能示例【附源码下载】
2018/01/12 Javascript
使用Vue自定义指令实现Select组件
2018/05/24 Javascript
讲解vue-router之命名路由和命名视图
2018/05/28 Javascript
[10:18]2018DOTA2国际邀请赛寻真——找回自信的TNCPredator
2018/08/13 DOTA
[43:03]完美世界DOTA2联赛PWL S2 PXG vs Magma 第二场 11.21
2020/11/24 DOTA
python实现守护进程、守护线程、守护非守护并行
2018/05/05 Python
matplotlib subplots 调整子图间矩的实例
2018/05/25 Python
详解python中TCP协议中的粘包问题
2019/03/22 Python
Django框架视图层URL映射与反向解析实例分析
2019/07/29 Python
Django中ajax发送post请求 报403错误CSRF验证失败解决方案
2019/08/13 Python
在pytorch中为Module和Tensor指定GPU的例子
2019/08/19 Python
Django更新models数据库结构步骤
2020/04/01 Python
Python导入数值型Excel数据并生成矩阵操作
2020/06/09 Python
python如何建立全零数组
2020/07/19 Python
使用Python判断一个文件是否被占用的方法教程
2020/12/16 Python
详解移动端HTML5音频与视频问题及解决方案
2018/08/22 HTML / CSS
基于HTML5的齿轮动画特效
2016/02/29 HTML / CSS
《北京的春节》教学反思
2014/04/07 职场文书
计算机专业自荐信范文
2014/05/28 职场文书
违反单位工作制度检讨书
2014/10/25 职场文书
机修车间主任岗位职责
2015/04/08 职场文书
Linux中sftp常用命令整理
2022/06/28 Servers