解决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中使用第三方库xlrd来写入Excel文件示例
Apr 05 Python
一个基于flask的web应用诞生(1)
Apr 11 Python
python中 chr unichr ord函数的实例详解
Aug 06 Python
Python画柱状统计图操作示例【基于matplotlib库】
Jul 04 Python
500行Python代码打造刷脸考勤系统
Jun 03 Python
Django框架基础模板标签与filter使用方法详解
Jul 23 Python
python pycharm的安装及其使用
Oct 11 Python
Django1.11配合uni-app发起微信支付的实现
Oct 12 Python
Python json转字典字符方法实例解析
Apr 13 Python
Python中的xlrd模块使用原理解析
May 21 Python
python3 re返回形式总结
Nov 20 Python
python基于win32api实现键盘输入
Dec 09 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小偷程序)
2014/08/23 PHP
鼠标图片振动代码
2006/07/06 Javascript
用YUI做了个标签浏览效果
2007/02/20 Javascript
innerText和textContent对比及使用介绍
2013/02/27 Javascript
jquery放大镜效果超漂亮噢
2013/11/15 Javascript
jquery动态改变onclick属性导致失效的问题解决方法
2013/12/04 Javascript
JQuery右键菜单插件ContextMenu使用指南
2014/12/19 Javascript
JS+CSS实现下拉列表框美化效果(3款)
2015/08/15 Javascript
JavaScript Ajax编程 应用篇
2016/07/02 Javascript
AngularJS使用带属性值的ng-app指令实现自定义模块自动加载的方法
2017/01/04 Javascript
利用es6 new.target来对模拟抽象类的方法
2019/05/10 Javascript
VUE项目初建和常见问题总结
2019/09/12 Javascript
javascript设计模式 ? 职责链模式原理与用法实例分析
2020/04/16 Javascript
vue 限制input只能输入正数的操作
2020/08/05 Javascript
python中的字典详细介绍
2014/09/18 Python
Python随机数用法实例详解【基于random模块】
2017/04/18 Python
Python自定义线程类简单示例
2018/03/23 Python
python 地图经纬度转换、纠偏的实例代码
2018/08/06 Python
python3使用flask编写注册post接口的方法
2018/12/28 Python
python scp 批量同步文件的实现方法
2019/01/03 Python
Django自定义用户登录认证示例代码
2019/06/30 Python
Tensorflow tf.dynamic_partition矩阵拆分示例(Python3)
2020/02/07 Python
python梯度下降算法的实现
2020/02/24 Python
使用TensorBoard进行超参数优化的实现
2020/07/06 Python
Pytorch损失函数nn.NLLLoss2d()用法说明
2020/07/07 Python
法国创作个性化T恤衫和其他定制产品平台:Tostadora
2018/04/08 全球购物
MAC彩妆英国官网:M·A·C UK
2018/05/30 全球购物
如果NULL定义成#define NULL((char *)0)难道不就可以向函数传入不加转换的NULL了吗
2012/02/15 面试题
周鸿祎:教你写创业计划书
2013/12/30 职场文书
无毒社区工作方案
2014/05/23 职场文书
迎国庆演讲稿
2014/09/15 职场文书
2014年庆祝国庆65周年演讲稿
2014/09/21 职场文书
高校群众路线教育实践活动剖析材料
2014/10/10 职场文书
哪类餐饮行业,最适合在高校创业?
2019/08/19 职场文书
Python数据处理的三个实用技巧分享
2022/04/01 Python
Node.js实现爬取网站图片的示例代码
2022/04/04 NodeJs