解决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基于mysql实现的简单队列以及跨进程锁实例详解
Jul 07 Python
python使用socket连接远程服务器的方法
Apr 29 Python
TensorFlow损失函数专题详解
Apr 26 Python
浅谈python日志的配置文件路径问题
Apr 28 Python
Tensorflow使用tfrecord输入数据格式
Jun 19 Python
对Python生成汉字字库文字,以及转换为文字图片的实例详解
Jan 29 Python
python Elasticsearch索引建立和数据的上传详解
Aug 04 Python
使用Python构造hive insert语句说明
Jun 06 Python
Python 实现键盘鼠标按键模拟
Nov 18 Python
解决Python字典查找报Keyerror的问题
May 26 Python
浅析Python OpenCV三种滤镜效果
Apr 11 Python
Python中的协程(Coroutine)操作模块(greenlet、gevent)
May 30 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下常用正则表达式整理
2010/10/26 PHP
解析wamp5下虚拟机配置文档
2013/06/27 PHP
php获取当前url地址的方法小结
2017/01/10 PHP
yii2.0框架实现上传excel文件后导入到数据库的方法示例
2020/04/13 PHP
javascript实现 在光标处插入指定内容
2007/05/25 Javascript
JavaScript设置、获取、清除单值和多值cookie的方法
2015/11/17 Javascript
JavaScript中用let语句声明作用域的用法讲解
2016/05/20 Javascript
jQuery简单获取DIV和A标签元素位置的方法
2017/02/07 Javascript
微信小程序 基础知识css样式media标签
2017/02/15 Javascript
Vue.js使用$.ajax和vue-resource实现OAuth的注册、登录、注销和API调用
2017/05/10 Javascript
JS库之Particles.js中文开发手册及参数详解
2017/09/13 Javascript
JavaScript实现快速排序的方法分析
2018/01/10 Javascript
nodejs简单读写excel内容的方法示例
2018/03/16 NodeJs
vue实现Excel文件的上传与下载功能的两种方式
2019/06/28 Javascript
JS中的算法与数据结构之二叉查找树(Binary Sort Tree)实例详解
2019/08/16 Javascript
vue插件--仿微信小程序showModel实现模态提示窗功能
2020/08/19 Javascript
python中元类用法实例
2014/10/10 Python
在python3.5中使用OpenCV的实例讲解
2018/04/02 Python
python3 读取Excel表格中的数据
2018/10/16 Python
关于Django ForeignKey 反向查询中filter和_set的效率对比详解
2018/12/15 Python
python中for循环把字符串或者字典添加到列表的方法
2019/07/20 Python
jenkins配置python脚本定时任务过程图解
2019/10/29 Python
django实现模板中的字符串文字和自动转义
2020/03/31 Python
python-图片流传输的思路及示例(url转换二维码)
2020/12/21 Python
前端canvas水印快速制作(附完整代码)
2019/09/19 HTML / CSS
怎么可以提高数据库查询数据的速度
2014/06/28 面试题
咖啡店的创业计划书,让你hold不住
2014/01/03 职场文书
乡村卫生服务一体化管理实施方案
2014/03/30 职场文书
产品推广策划方案
2014/05/10 职场文书
酒店节能减排方案
2014/05/26 职场文书
体育专业大学生职业生涯规划范文:打造自己的运动帝国
2014/09/12 职场文书
领导班子群众路线与四风问题对照检查材料思想汇报
2014/10/11 职场文书
2015年敬老月活动总结
2015/03/27 职场文书
团结友爱主题班会
2015/08/13 职场文书
Go使用协程交替打印字符
2021/04/29 Golang
SpringBoot整合阿里云视频点播的过程详解
2021/12/06 Java/Android