解决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 相关文章推荐
使用wxPython获取系统剪贴板中的数据的教程
May 06 Python
用Python将动态GIF图片倒放播放的方法
Nov 02 Python
python获取当前目录路径和上级路径的实例
Apr 26 Python
python2.7实现爬虫网页数据
May 25 Python
Python3中exp()函数用法分析
Feb 19 Python
PyQt5 对图片进行缩放的实例
Jun 18 Python
用Pytorch训练CNN(数据集MNIST,使用GPU的方法)
Aug 19 Python
基于Tensorflow批量数据的输入实现方式
Feb 05 Python
python利用datetime模块计算程序运行时间问题
Feb 20 Python
简单了解python shutil模块原理及使用方法
Apr 28 Python
Python机器学习之KNN近邻算法
May 14 Python
Python 中random 库的详细使用
Jun 03 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
不用iconv库的gb2312与utf-8的互换函数
2006/10/09 PHP
php中邮箱地址正则表达式实现与详解
2012/04/24 PHP
DOM XPATH获取img src值的query
2013/09/23 PHP
PHP实现的获取文件mimes类型工具类示例
2018/04/08 PHP
PHP设计模式之模板模式定义与用法详解
2018/12/20 PHP
PHP数据源架构模式之表入口模式实例分析
2020/01/23 PHP
javascript写的日历类(基于pj)
2010/12/28 Javascript
关于JS字符串函数String.replace()
2013/04/07 Javascript
javascript完美拖拽的实现方法
2013/09/29 Javascript
Jquery实现仿腾讯微博发表广播
2014/11/17 Javascript
使用Raygun来自动追踪AngularJS中的异常
2015/06/23 Javascript
移动端 一个简单易懂的弹出框
2016/07/06 Javascript
Vue.js组件tree实现无限级树形菜单
2016/12/02 Javascript
bootstrap实现每隔5秒自动轮播效果
2016/12/20 Javascript
JavaScript之DOM_动力节点Java学院整理
2017/07/03 Javascript
JS写谷歌浏览器chrome的外挂实例
2018/01/11 Javascript
vue中父子组件注意事项,传值及slot应用技巧
2018/05/09 Javascript
vue引入js数字小键盘的实现代码
2018/05/14 Javascript
mpvue开发音频类小程序踩坑和建议详解
2019/03/12 Javascript
JavaScript遍历数组和对象的元素简单操作示例
2019/07/09 Javascript
npm全局环境变量配置详解
2020/12/15 Javascript
Python中基础的socket编程实战攻略
2016/06/01 Python
浅谈Python 集合(set)类型的操作——并交差
2016/06/30 Python
使用python opencv对目录下图片进行去重的方法
2019/01/12 Python
Python中断多重循环的思路总结
2019/10/04 Python
详解django使用include无法跳转的解决方法
2020/03/19 Python
Python os库常用操作代码汇总
2020/11/03 Python
台湾家适得:Homeget
2019/02/11 全球购物
params有什么用
2016/03/01 面试题
环境科学专业个人求职信
2013/09/26 职场文书
三年级班级文化建设方案
2014/05/04 职场文书
年度安全生产目标责任书
2014/07/23 职场文书
关于读书的演讲稿1000字
2014/08/27 职场文书
《围炉夜话》110句人生箴言,精辟有内涵,引人深思
2019/10/23 职场文书
python基于tkinter制作m3u8视频下载工具
2021/04/24 Python
python机器学习Github已达8.9Kstars模型解释器LIME
2021/11/23 Python