当前位置: 首页 > 编程笔记 >

解决python打开https出现certificate verify failed的问题

燕砚文
2023-03-14
本文向大家介绍解决python打开https出现certificate verify failed的问题,包括了解决python打开https出现certificate verify failed的问题的使用技巧和注意事项,需要的朋友参考一下

今天遇到一个奇怪的问题,在用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出现_warn_unsafe_extraction问题的方法,包括了解决Python出现_warn_unsafe_extraction问题的方法的使用技巧和注意事项,需要的朋友参考一下 在Python项目中运行出现了“AttributeError: ResourceManager instance has no attribute ‘_warn_unsafe_extr

  • 本文向大家介绍解决wx.onMenuShareTimeline出现的问题,包括了解决wx.onMenuShareTimeline出现的问题的使用技巧和注意事项,需要的朋友参考一下 wx.onMenuShareTimeline使用注意事项 我在开发测试过程中,发现使用wx.onMenuShareTimeline无效果,没有显示我定义的图片、title和链接,经过调试发现原因如下: 1.图片大小要大于

  • 本文向大家介绍解决Python pandas df 写入excel 出现的问题,包括了解决Python pandas df 写入excel 出现的问题的使用技巧和注意事项,需要的朋友参考一下 学习Python数据分析挖掘实战一书时,在数据预处理阶段,有一节要使用拉格朗日插值法对缺失值补充,代码如下: 1.import xlwt 错误 这个问题比较简单,只需要在官网上下载安装或者直接在编译器中运行如

  • 问题内容: 现有2个版本的java系统,1.6版本无法卸载(dll无法运行) 求大神拯救!小白一枚想学习安卓系统 问题答案: 把你想用的那个版本设置环境变量,设置JAVA_HOME=”你安装的JDK路径”

  • 本文向大家介绍解决python和pycharm安装gmpy2 出现ERROR的问题,包括了解决python和pycharm安装gmpy2 出现ERROR的问题的使用技巧和注意事项,需要的朋友参考一下 python和pycharm安装gmpy2:pip install gmpy2出现ERROR: Command errored out with exit status 1: 部分报错代码 Colle

  • 本文向大家介绍解决pytorch DataLoader num_workers出现的问题,包括了解决pytorch DataLoader num_workers出现的问题的使用技巧和注意事项,需要的朋友参考一下 最近在学pytorch,在使用数据分批训练时在导入数据是使用了 DataLoader 在参数 num_workers的设置上使程序出现运行没有任何响应的结果 ,看看代码 (以上代码取莫烦p

  • 本文向大家介绍解决python使用open打开文件中文乱码的问题,包括了解决python使用open打开文件中文乱码的问题的使用技巧和注意事项,需要的朋友参考一下 代码如下: 先在D盘下新建一个html文档,然后在里面输入含有中文的Html字符如下图,然后我们首先使用中文格式对读取的字符进行解码再用utf-8的模式对字符进行进行编码,然后就能正确输出中文字符 以上这篇解决python使用open打

  • 问题内容: 我要使用64位版本的Enthought Python,以处理多个HDF5文件中的数据。我在64位Windows上使用h5py版本1.3.1(HDF5 1.8.4)。 我有一个对象,可以为我的特定数据层次结构提供方便的接口,但是独立测试h5py.File(fname,’r’)会产生相同的结果。我正在遍历一长串列表(一次约100个文件),并尝试从文件中提取特定信息。我遇到的问题是,我从几个