解决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笔记(2)
Oct 24 Python
Python中处理unchecked未捕获异常实例
Jan 17 Python
实例探究Python以并发方式编写高性能端口扫描器的方法
Jun 14 Python
Python sqlite3事务处理方法实例分析
Jun 19 Python
对python操作kafka写入json数据的简单demo分享
Dec 27 Python
解决python Markdown模块乱码的问题
Feb 14 Python
详解Python读取yaml文件多层菜单
Mar 23 Python
python实现树的深度优先遍历与广度优先遍历详解
Oct 26 Python
tensorflow之并行读入数据详解
Feb 05 Python
python求最大公约数和最小公倍数的简单方法
Feb 13 Python
详解PyQt5信号与槽的几种高级玩法
Mar 24 Python
浅谈keras2 predict和fit_generator的坑
Jun 17 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学习笔记之 函数声明(二)
2011/06/09 PHP
php使用百度ping服务代码实例
2014/06/19 PHP
Thinkphp3.2简单解决多文件上传只上传一张的问题
2017/09/26 PHP
php5对象复制、clone、浅复制与深复制实例详解
2019/08/14 PHP
关于javascript DOM事件模型的两件事
2010/07/22 Javascript
理解Javascript_08_函数对象
2010/10/15 Javascript
JS高级笔记
2011/07/13 Javascript
一样的table?不一样的table(可编辑状态table)
2012/09/19 Javascript
js 在定义的时候立即执行的函数表达式(function)写法
2013/01/16 Javascript
window.onload追加函数使用示例
2014/03/03 Javascript
js中for in语句的用法讲解
2015/04/24 Javascript
JavaScript中Textarea滚动条不能拖动的解决方法
2015/12/15 Javascript
jQuery绑定事件监听bind和移除事件监听unbind用法实例详解
2016/01/19 Javascript
jquery取消事件冒泡的三种方法(推荐)
2016/05/28 Javascript
JS+CSS3实现超炫的散列画廊特效
2016/07/16 Javascript
JavaScript实现大图轮播效果
2017/01/11 Javascript
jquery ajaxfileuplod 上传文件 essyui laoding 效果【防止重复上传文件】
2018/05/26 jQuery
webpack打包多页面的方法
2018/11/30 Javascript
pageGroup.js实现分页功能
2019/07/27 Javascript
pandas ix &iloc &loc的区别
2019/01/10 Python
python对绑定事件的鼠标、按键的判断实例
2019/07/17 Python
简单易懂Pytorch实战实例VGG深度网络
2019/08/27 Python
详解python中docx库的安装过程
2019/11/08 Python
PyQt5中多线程模块QThread使用方法的实现
2020/01/31 Python
如何将tensorflow训练好的模型移植到Android (MNIST手写数字识别)
2020/04/22 Python
Django+Celery实现动态配置定时任务的方法示例
2020/05/26 Python
浅析Python 简单工厂模式和工厂方法模式的优缺点
2020/07/13 Python
解决python便携版无法直接运行py文件的问题
2020/09/01 Python
详解CSS3开启硬件加速的使用和坑
2017/08/21 HTML / CSS
澳大利亚免息网上购物:Shop Zero
2016/09/17 全球购物
英国最大的女士服装零售商:Bonmarché
2017/08/17 全球购物
英国床垫和床架购物网站:Bedman
2019/11/04 全球购物
门卫岗位安全职责
2013/12/13 职场文书
高一新生军训方案
2014/05/12 职场文书
2015年教研员工作总结
2015/05/26 职场文书
Vue和Flask通信的实现
2021/05/19 Vue.js