解决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使用reportlab将目录下所有的文本文件打印成pdf的方法
May 20 Python
Python删除windows垃圾文件的方法
Jul 14 Python
Python定时器实例代码
Nov 01 Python
Django+Ajax+jQuery实现网页动态更新的实例
May 28 Python
详解小白之KMP算法及python实现
Apr 04 Python
简单了解python的一些位运算技巧
Jul 13 Python
tensorflow保持每次训练结果一致的简单实现
Feb 17 Python
Python安装与卸载流程详细步骤(图解)
Feb 20 Python
Pytorch 高效使用GPU的操作
Jun 27 Python
python实现每天自动签到领积分的示例代码
Aug 18 Python
刚学完怎么用Python实现定时任务,转头就跑去撩妹!
Jun 05 Python
教你使用Python获取QQ音乐某个歌手的歌单
Apr 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
用PHP 4.2书写安全的脚本
2006/10/09 PHP
PHP处理Json字符串解码返回NULL的解决方法
2014/09/01 PHP
php实现概率性随机抽奖代码
2016/01/02 PHP
CSS和JS标签style属性对照表(方便js开发的朋友)
2010/11/11 Javascript
jquery图片上下tab切换效果
2011/03/18 Javascript
利用js制作html table分页示例(js实现分页)
2014/04/25 Javascript
jQuery中:checkbox选择器用法实例
2015/01/03 Javascript
简单的JS轮播图代码
2016/07/18 Javascript
JavaScript中常见的八个陷阱总结
2017/06/28 Javascript
微信小程序实现tab切换效果
2017/11/21 Javascript
详解写好JS条件语句的5条守则
2019/02/28 Javascript
JS+php后台实现文件上传功能详解
2019/03/02 Javascript
vue-cli的build的文件夹下没有dev-server.js文件配置mock数据的方法
2019/04/17 Javascript
[03:08]Ti4观战指南上
2014/07/07 DOTA
Python实现设置windows桌面壁纸代码分享
2015/03/28 Python
Python分治法定义与应用实例详解
2017/07/28 Python
python搭建服务器实现两个Android客户端间收发消息
2018/04/12 Python
python实现基于朴素贝叶斯的垃圾分类算法
2019/07/09 Python
python 执行终端/控制台命令的例子
2019/07/12 Python
pycharm无法安装第三方库的问题及解决方法以scrapy为例(图解)
2020/05/09 Python
python爬虫看看虎牙女主播中谁最“顶”步骤详解
2020/12/01 Python
html5模拟平抛运动(模拟小球平抛运动过程)
2013/07/25 HTML / CSS
韩国现代百货官网:Hmall
2018/03/21 全球购物
小米官方旗舰店:Xiaomi
2020/08/07 全球购物
应届毕业生个人自我评价
2013/09/20 职场文书
小饰品店的创业计划书范文
2013/12/28 职场文书
物流司机岗位职责
2013/12/28 职场文书
毕业生如何写自荐信
2014/03/26 职场文书
同学聚会策划方案
2014/06/06 职场文书
最美护士演讲稿
2014/08/27 职场文书
个人总结与自我评价
2014/09/18 职场文书
2014年远程教育工作总结
2014/12/09 职场文书
党员转正申请报告
2015/05/15 职场文书
卫生保健工作总结2015
2015/05/18 职场文书
JDBC连接的六步实例代码(与mysql连接)
2021/05/12 MySQL
Python数据分析入门之教你怎么搭建环境
2021/05/13 Python