解决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实现的矩阵类实例
Aug 22 Python
Python排序搜索基本算法之归并排序实例分析
Dec 08 Python
Python使用matplotlib模块绘制图像并设置标题与坐标轴等信息示例
May 04 Python
Python实现网站表单提交和模板
Jan 15 Python
详解Python网络框架Django和Scrapy安装指南
Apr 01 Python
python写日志文件操作类与应用示例
Jul 01 Python
简单易懂Pytorch实战实例VGG深度网络
Aug 27 Python
浅谈Python中os模块及shutil模块的常规操作
Apr 03 Python
jupyter notebook 恢复误删单元格或者历史代码的实现
Apr 17 Python
Python爬取阿拉丁统计信息过程图解
May 12 Python
如何利用python之wxpy模块玩转微信
Aug 17 Python
Python基于unittest实现测试用例执行
Nov 25 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 Directory 函数的详解
2013/03/07 PHP
ThinkPHP学习笔记(一)ThinkPHP部署
2014/06/22 PHP
浅谈php中urlencode与rawurlencode的区别
2016/09/05 PHP
php解析非标准json、非规范json的方式实例
2020/12/10 PHP
Aster vs KG BO3 第二场2.18
2021/03/10 DOTA
js获取客户端外网ip的简单实例
2013/11/21 Javascript
nodejs命令行参数处理模块commander使用实例
2014/09/17 NodeJs
常用的JS验证和函数汇总
2014/12/23 Javascript
BOOTSTRAP时间控件显示在模态框下面的bug修复
2015/02/05 Javascript
JS实现自动切换文字的导航效果代码
2015/08/27 Javascript
gulp-htmlmin压缩html的gulp插件实例代码
2016/06/06 Javascript
jquery radio的取值_radio的选中_radio的重置方法
2016/09/20 Javascript
AngularJs验证重复密码的方法(两种)
2016/11/25 Javascript
利用CSS、JavaScript及Ajax实现图片预加载的三大方法
2017/01/22 Javascript
纯js实现html转pdf的简单实例(推荐)
2017/02/16 Javascript
JS获取日期的方法实例【昨天,今天,明天,前n天,后n天的日期】
2017/09/28 Javascript
layui中使用jquery控制radio选中事件的示例代码
2018/08/15 jQuery
详解搭建一个vue-cli的移动端H5开发模板
2020/01/17 Javascript
JS数组及对象遍历方法代码汇总
2020/06/16 Javascript
vue实现禁止浏览器记住密码功能的示例代码
2021/02/03 Vue.js
python快速排序代码实例
2013/11/21 Python
Django中的“惰性翻译”方法的相关使用
2015/07/27 Python
python使用pycharm环境调用opencv库
2018/02/11 Python
Python比较2个时间大小的实现方法
2018/04/10 Python
python 实现登录网页的操作方法
2018/05/11 Python
Python 使用Numpy对矩阵进行转置的方法
2019/01/28 Python
python 在sql语句中使用%s,%d,%f说明
2020/06/06 Python
python实现启动一个外部程序,并且不阻塞当前进程
2020/12/05 Python
详解HTML5如何使用可选样式表为网站或应用添加黑暗模式
2020/04/07 HTML / CSS
HealthElement海外旗舰店:新西兰大卖场
2018/02/23 全球购物
软件生产职位结构化面试主要考察要素及面试题库
2015/06/12 面试题
语文教学感言
2014/02/06 职场文书
优秀护士获奖感言
2014/02/20 职场文书
2014幼儿园卫生保健工作总结
2014/12/05 职场文书
三八节活动简报
2015/07/20 职场文书
vue前端工程的搭建
2021/03/31 Vue.js