解决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中的元组与逻辑运算符
Oct 13 Python
浅谈python装饰器探究与参数的领取
Dec 01 Python
python使用pycharm环境调用opencv库
Feb 11 Python
python自动查询12306余票并发送邮箱提醒脚本
May 21 Python
修改默认的pip版本为对应python2.7的方法
Nov 06 Python
浅谈Python中的全局锁(GIL)问题
Jan 11 Python
python 实现将Numpy数组保存为图像
Jan 09 Python
Python变量作用域LEGB用法解析
Feb 04 Python
AUC计算方法与Python实现代码
Feb 28 Python
python高级特性简介
Aug 13 Python
python基础之爬虫入门
May 10 Python
pytorch 如何使用batch训练lstm网络
May 28 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
Apache+PHP+MySQL搭建PHP开发环境图文教程
2020/08/06 PHP
IE中radio 或checkbox的checked属性初始状态下不能选中显示问题
2009/07/25 Javascript
js中onload与onunload的使用示例
2013/08/25 Javascript
jquery实现input输入框实时输入触发事件代码
2014/01/28 Javascript
解决html按钮切换绑定不同函数后点击时执行多次函数问题
2014/05/14 Javascript
使用jquery.qrcode生成彩色二维码实例
2014/08/08 Javascript
javascript模拟php函数in_array
2015/04/27 Javascript
javascript中数组(Array)对象和字符串(String)对象的常用方法总结
2016/12/15 Javascript
Node.js 使用命令行工具检查更新
2017/06/08 Javascript
jQuery Ajax async=>false异步改为同步时,解决导致浏览器假死的问题
2019/07/22 jQuery
解决layui laydate 时间控件一闪而过的问题
2019/09/28 Javascript
vuex实现数据状态持久化
2019/11/11 Javascript
vue2.0实现列表数据增加和删除
2020/06/17 Javascript
JavaScript实现下拉列表
2021/01/20 Javascript
[01:19:46]EG vs Secret 2019国际邀请赛淘汰赛 胜者组 BO3 第二场 8.21.mp4
2020/07/19 DOTA
Windows系统下使用flup搭建Nginx和Python环境的方法
2015/12/25 Python
让python在hadoop上跑起来
2016/01/27 Python
Python调用C# Com dll组件实战教程
2017/10/12 Python
python使用jieba实现中文分词去停用词方法示例
2018/03/11 Python
Django框架多表查询实例分析
2018/07/04 Python
一文带你了解Python中的字符串是什么
2018/11/20 Python
python 获取微信好友列表的方法(微信web)
2019/02/21 Python
PyCharm使用之配置SSH Interpreter的方法步骤
2019/12/26 Python
CSS3 重置iphone浏览器按钮input,select等表单元素的默认样式
2014/10/11 HTML / CSS
利用纯CSS3实现动态的自行车特效源码
2017/01/20 HTML / CSS
Kent & Curwen:与大卫·贝克汉姆合作
2017/06/13 全球购物
N:Philanthropy官网:美国洛杉矶基础款服装
2020/06/09 全球购物
Feelunique中文官网:欧洲最大化妆品零售电商
2020/07/10 全球购物
必须要使用游标的SQL语句有那些
2012/05/07 面试题
中学校庆方案
2014/03/17 职场文书
作风建设演讲稿
2014/05/23 职场文书
文秘自荐信
2014/06/28 职场文书
2014年助理工程师工作总结
2014/11/14 职场文书
党员年度个人总结
2015/02/14 职场文书
招商银行工作证明
2015/06/17 职场文书
关于感恩的作文
2019/08/26 职场文书