解决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局域网ip扫描示例分享
Apr 03 Python
有关wxpython pyqt内存占用问题分析
Jun 09 Python
Python入门之三角函数atan2()函数详解
Nov 08 Python
flask框架视图函数用法示例
Jul 19 Python
Python对象与引用的介绍
Jan 24 Python
pygame实现烟雨蒙蒙下彩虹雨
Nov 11 Python
简单了解python元组tuple相关原理
Dec 02 Python
python实现用类读取文件数据并计算矩形面积
Jan 18 Python
python使用多线程+socket实现端口扫描
May 28 Python
Python使用Opencv实现边缘检测以及轮廓检测的实现
Dec 31 Python
pandas apply使用多列计算生成新的列实现示例
Feb 24 Python
Python实现学生管理系统并生成exe可执行文件详解流程
Jan 22 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多线程异步请求的3种方法
2014/01/17 PHP
PHP生成条形码大揭秘
2015/09/24 PHP
CSS中简写属性要注意TRouBLe的顺序问题(避免踩坑)
2021/03/09 HTML / CSS
asp 取文本框名称代码
2008/12/02 Javascript
EasyUI的treegrid组件动态加载数据问题的解决办法
2011/12/11 Javascript
为JavaScript类型增加方法的实现代码(增加功能)
2011/12/29 Javascript
JavaScript设计模式之策略模式实例
2014/10/10 Javascript
Bootstrap每天必学之标签页(Tab)插件
2020/08/09 Javascript
nodejs 的 session 简单使用
2016/06/06 NodeJs
JavaScript中const、var和let区别浅析
2016/10/11 Javascript
手把手教你把nodejs部署到linux上跑出hello world
2017/06/19 NodeJs
基于JavaScript表单脚本(详解)
2017/10/18 Javascript
JS中的回调函数实例浅析
2018/03/21 Javascript
vue+animation实现翻页动画
2020/06/29 Javascript
vue 二维码长按保存和复制内容操作
2020/09/22 Javascript
JS实现多功能计算器
2020/10/28 Javascript
Python写的创建文件夹自定义函数mkdir()
2014/08/25 Python
Python实现抓取百度搜索结果页的网站标题信息
2015/01/22 Python
图文详解WinPE下安装Python
2016/05/17 Python
目前最全的python的就业方向
2018/06/05 Python
python基础梳理(一)(推荐)
2019/04/06 Python
python3爬虫学习之数据存储txt的案例详解
2019/04/24 Python
windows系统中Python多版本与jupyter notebook使用虚拟环境的过程
2019/05/15 Python
python生成并处理uuid的实现方式
2020/03/03 Python
Nuts.com:优质散装,批发坚果、干果和巧克力等
2017/03/21 全球购物
Ajax主要包含了哪些技术
2014/06/12 面试题
秋季运动会加油稿200字
2014/01/11 职场文书
婚礼新郎父母答谢词
2014/01/16 职场文书
购房意向书
2014/04/01 职场文书
大学生党员学习焦裕禄精神思想汇报
2014/09/10 职场文书
九寨沟导游词
2015/02/02 职场文书
酒店销售经理岗位职责
2015/04/02 职场文书
建党伟业电影观后感
2015/06/01 职场文书
工商局调档介绍信
2015/10/22 职场文书
k-means & DBSCAN 总结
2021/04/27 Python
实例讲解Python中sys.argv[]的用法
2021/06/03 Python