解决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程序实例(通讯录)
Nov 29 Python
python脚本监控docker容器
Apr 27 Python
对numpy和pandas中数组的合并和拆分详解
Apr 11 Python
使用python将大量数据导出到Excel中的小技巧分享
Jun 14 Python
python 实现将字典dict、列表list中的中文正常显示方法
Jul 06 Python
python3中函数参数的四种简单用法
Jul 09 Python
用pandas中的DataFrame时选取行或列的方法
Jul 11 Python
python opencv实现切变换 不裁减图片
Jul 26 Python
对python 生成拼接xml报文的示例详解
Dec 28 Python
Python命名空间namespace及作用域原理解析
Jun 05 Python
keras读取h5文件load_weights、load代码操作
Jun 12 Python
Python3 webservice接口测试代码详解
Jun 23 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常用数组array函数实例总结【赋值,拆分,合并,计算,添加,删除,查询,判断,排序】
2016/12/07 PHP
最新28个很棒的jQuery 教程
2011/05/28 Javascript
jQuery EasyUI API 中文文档 - TimeSpinner时间微调器
2011/10/23 Javascript
js 判断文件类型并控制表单提交示例代码
2013/11/14 Javascript
利用进制转换压缩数字函数分享
2014/01/02 Javascript
jquery删除提示框弹出是否删除对话框
2014/01/07 Javascript
JS弹出层单纯的绝对定位居中示例代码
2014/02/18 Javascript
JS实现点击颜色块切换指定区域背景颜色的方法
2015/02/25 Javascript
jQuery动态添加及删除表单上传元素的方法(附demo源码下载)
2016/01/15 Javascript
微信小程序(应用号)开发新闻客户端实例
2016/10/24 Javascript
jQuery中的一些小技巧
2017/01/18 Javascript
js实现5秒倒计时重新发送短信功能
2017/02/05 Javascript
实现一个完整的Node.js RESTful API的示例
2017/09/29 Javascript
浅析Vue项目中使用keep-Alive步骤
2018/07/27 Javascript
Vue数据绑定简析小结
2019/05/07 Javascript
layui select 禁止点击的实现方法
2019/09/05 Javascript
vue子组件改变父组件传递的prop值通过sync实现数据双向绑定(DEMO)
2020/02/01 Javascript
[32:17]完美世界DOTA2联赛循环赛LBZS vs Forest第二场 10月30日
2020/10/31 DOTA
python正则匹配查询港澳通行证办理进度示例分享
2013/12/27 Python
Python获取CPU、内存使用率以及网络使用状态代码
2018/02/08 Python
详解Python3的TFTP文件传输
2018/06/26 Python
eclipse创建python项目步骤详解
2019/05/10 Python
对python中的*args与**kwgs的含义与作用详解
2019/08/28 Python
HTML5在a标签内放置块级元素示例代码
2013/08/23 HTML / CSS
LACOSTE波兰官网:Polo衫、服装和鞋类
2020/09/29 全球购物
个人简历的自荐信
2013/10/23 职场文书
班长岗位职责
2013/11/10 职场文书
生育关怀行动实施方案
2014/03/26 职场文书
公司聘任书模板
2014/03/29 职场文书
特教教师先进事迹
2014/05/21 职场文书
师德师风建设整改措施思想汇报
2014/10/11 职场文书
2015新学期校长寄语(3篇)
2015/03/25 职场文书
为自己工作观后感
2015/06/11 职场文书
婚育证明样本
2015/06/16 职场文书
redis 限制内存使用大小的实现
2021/05/08 Redis
详解PHP服务器如何在有限的资源里最大提升并发能力
2021/05/25 PHP