解决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使用any判断一个对象是否为空的方法
Nov 19 Python
Python删除空文件和空文件夹的方法
Jul 14 Python
Python列表list解析操作示例【整数操作、字符操作、矩阵操作】
Jul 25 Python
Django中login_required装饰器的深入介绍
Nov 24 Python
mac下如何将python2.7改为python3
Jul 13 Python
浅谈Python脚本开头及导包注释自动添加方法
Oct 27 Python
浅析python3字符串格式化format()函数的简单用法
Dec 07 Python
Python TestCase中的断言方法介绍
May 02 Python
python 队列基本定义与使用方法【初始化、赋值、判断等】
Oct 24 Python
python访问hdfs的操作
Jun 06 Python
python3从网络摄像机解析mjpeg http流的示例
Nov 13 Python
python之基数排序的实现
Jul 26 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
PHP6 中可能会出现的新特性预览
2014/04/04 PHP
Zend Framework生成验证码并实现验证码验证功能(附demo源码下载)
2016/03/22 PHP
laravel 中某一字段自增、自减的例子
2019/10/11 PHP
关于COOKIE个数与大小的问题
2011/01/17 Javascript
js调用后台、后台调用前台等方法总结
2014/04/17 Javascript
Jquery给基本控件的取值、赋值示例
2014/05/23 Javascript
javascript数组去重方法终极总结
2014/06/05 Javascript
JQuery中使用Ajax赋值给全局变量失败异常的解决方法
2014/08/18 Javascript
jQuery实现时尚漂亮的弹出式对话框实例
2015/08/07 Javascript
AngularJS ng-mousedown 指令
2016/08/02 Javascript
Bootstrap基本组件学习笔记之input输入框组(9)
2016/12/07 Javascript
js中的事件委托或是事件代理使用详解
2017/06/23 Javascript
解决VUEX刷新的时候出现数据消失
2017/07/03 Javascript
使用Vue-cli 3.0搭建Vue项目的方法
2018/06/07 Javascript
Angularjs实现数组随机排序的方法
2018/10/02 Javascript
vue在index.html中引入静态文件不生效问题及解决方法
2019/04/29 Javascript
layer.open的自适应及居中及子页面标题的修改方法
2019/09/05 Javascript
JavaScript变量Dom对象的所有属性
2020/04/30 Javascript
Vue中computed及watch区别实例解析
2020/08/01 Javascript
[04:04]显微镜下的DOTA2第六期——电影级别的华丽团战
2014/06/20 DOTA
[10:14]2018DOTA2国际邀请赛寻真——paiN Gaming不仅为自己而战
2018/08/14 DOTA
利用QT写一个极简单的图形化Python闹钟程序
2015/04/07 Python
Python实现堆排序的方法详解
2016/05/03 Python
Python星号*与**用法分析
2018/02/02 Python
python递归全排列实现方法
2018/08/18 Python
详解Python给照片换底色(蓝底换红底)
2019/03/22 Python
pandas to_excel 添加颜色操作
2020/07/14 Python
Python命令行参数定义及需要注意的地方
2020/11/30 Python
python+selenium实现12306模拟登录的步骤
2021/01/21 Python
HTML5计时器小例子
2013/10/15 HTML / CSS
canvas因为图片资源不在同一域名下而导致的跨域污染画布的解决办法
2019/01/18 HTML / CSS
css animation配合SVG制作能量流动效果
2021/03/24 HTML / CSS
银行行长竞聘演讲稿
2014/04/23 职场文书
小学教师师德师风承诺书
2015/04/28 职场文书
使用Redis实现分布式锁的方法
2022/06/16 Redis
JavaScript原型链中函数和对象的理解
2022/06/16 Javascript