SSL: CERTIFICATE_VERIFY_FAILED 问题

news/2025/1/15 13:34:02/文章来源:https://www.cnblogs.com/rolandhe/p/18412766

使用python的过程中,在发送网络请求时有时候会遇到如下问题:
ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate

这个问题产生原因是python发送请求的网站或地址是https,这时需要验证对方网站的证书有效性。 但python使用的证书存储位置里找不到该网站的证书。
在任何发送http请求的地方都可能遇到,包括python内置库: ssl, urllib3, 以及一些第三方库:requests, httpx, aiohttp, 甚至包管理工具: pip, poetry 等。

certifi: 这是一个第三方模块,这个模块有一个证书存储。 使用pip命令对这个模块更新时,就等同于更新了最新的证书集合。很多其他模块都依赖于certifi模块。这个模块一般也会随其他模块安装时被一起安装,比如requests模块。
certifi.where() 调用这个方法将返回certifi保存的根证书的存储路径。
pip命令工具:这是安装python就自带的,甚至创建虚拟环境也会有独立的pip工具。每个pip工具都内置了一个certifi,注意,pip内置的certifi虽然与单独安装的certifi模块功能一样,但其只被pip命令工具自己用。其内置的证书存储也只能在pip工具自已更新时才更新 python -m pip install --upgrade pip。 pip命令本身可能通过--cert 参数来指定一个证书存储,也可以通过设置PIP_CERT环境变量来设置证书存储。在v22.2到24.2之前的这些版本,可以使用--use-feature=truststore参数来指定使用系统证书存储。从v24.2版本开始,pip自动同时使用certifi及操作系统的证书存储。此外,当确实无法验证对方证书有效性时,可以使用--trusted-host 参数来信息对方,从而略过证书验证的步骤。
truststore: 第三方模块,用于将操作系统的证书存储位置暴露出来。 pip工具从v24.2版本开始内置了这个模块,使用pip命令可以同时使用内置的certifi以及操作系统的证书存储。通过其truststore.inject_into_ssl()方法,可以让那些原本使用certifi证书存储的第三方库转而使用操作系统的证书存储。
可以使用truststore.SSLContext()方法达到更细粒度的控制,比如对单个请求。truststore.inject_into_ssl()方法并不适合用于构建package,因为一旦这样的package被import到其他项目时,项目运行的整个环境里原本该依赖certifi证书存储的程序部分就都会转而使用操作系统的证书存储了。 所以,应该更多考虑细粒度的控制。全局的修改适合单个项目或独立运行的脚本,而不是用于共享的模块。

import ssl
import urllib3
import truststorectx = truststore.SSLContext(ssl.PROTOCOL_TLS_CLIENT)http = urllib3.PoolManager(ssl_context=ctx)
resp = http.request("GET", "https://example.com")

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/796718.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

k8s 中的 Service 简介【k8s 系列之二】

〇、前言 k8s 集群中的每一个 Pod 都有自己的 IP 地址,那么是不是有 IP 了,访问起来就简单了呢,其实不然。 因为在 k8s 中 Pod 不是持久性的,摧毁重建将获得新的 IP,客户端通过会变更 IP 来访问显然不合理。另外 Pod 还经常会通过多个副本来实现负载均衡,客户端如何高效的…

软工作业二:论文查重系统

这个作业属于哪个课程 <计科22级34班>这个作业要求在哪里 [<作业要求>](个人项目 - 作业 - 计科22级34班 - 班级博客 - 博客园 (cnblogs.com))这个作业的目标 通过实际编程任务,全面提升学生在编程、算法、项目管理、性能优化、代码测试和版本控制等方面的能力,为…

面试-JS基础知识-作用域和闭包

问题this的不同应用场景 手写bind函数 实际开发中闭包的应用场景,举例说明 创建10个<a>标签,点击的时候弹出来对应的序号作用域:某个变量的合法使用范围全局 函数 块级** 自由变量上面图的最里面的红框————a a1 a2都是自由变量,因为都没有被定义。会一层一层往上…

学习高校课程-软件设计模式-软件设计原则(lec2)

软件设计原则Feature of Good Design (1) 优秀设计的特点(一) Code reuse 代码复用 – Challenge: tight coupling between components, dependencies on concrete classes instead of interfaces, hardcoded operations – Solution: design patterns – 挑战:组件之间的紧…

ATTCK红队评估(红日靶场4)

靶场介绍本次靶场渗透反序列化漏洞、命令执行漏洞、Tomcat漏洞、MS系列漏洞、端口转发漏洞、以及域渗透等多种组合漏洞,希望大家多多利用。 环境搭建 机器密码 WEB主机 ubuntu:ubuntuWIN7主机 douser:Dotest123(DC)WIN2008主机 administrator:Test2008网络配置111网段是web的网…

Markdown随笔

冰冻三尺非一日之寒,持之以恒方位始终。 Markdown语法讲解标题一共六级标题分别为Ctrl+1~6: 一级 二级 三级 四级 五级 六级字体 粗体 粗斜体 斜体 删除线引用一个大于号>分割线图片超链接 点击进入百度百科列表 数字加上空格(有序) 点加上空格(无序)表格姓名 性别 年…

tarjan里的定义

强连通分量 - OI Wiki (oi-wiki.org)从以u为根的子树中的任意点出发。单次到达(从这个点指向某个点,有一条边) 的这些点中的dfn的最小值以v为根的子树,包含在以u为根的子树中,low[v]所用的子节点,一定也可以被low[u],这个点一定在以u为根的子树里,所以用low[v] 从u这个…

南沙csp-j/s一对一家教陈老师解题:1317:【例5.2】组合的输出

​【题目描述】排列与组合是常用的数学方法,其中组合就是从n个元素中抽出r个元素(不分顺序且r≤n),我们可以简单地将n个元素理解为自然数1,2,…,n,从中任取r个数。 现要求你用递归的方法输出所有组合。 例如n=5,r=3,所有组合为: 1 2 3 1 2 4 1 2 5 1 3 4 1 …

First day01

Markdown学习 二级标题 字体 Hello World Hello World Hello World Hello World Hello World 引用选择java走上人生巅峰分割线图片 ![截图](C:\Users\邢其俊\Pictures\Screenshots\屏幕截图 2024-09-13 180016.png)超链接 [点击跳转到狂神博客](仓库 - 狂神说 (kuangstudy) - G…

ThreeJS Shader的效果样例光影墙、扩散面(四)

一、实现一个光影墙1. 根据自定义坐标点,输出一个光影墙/*** 添加光影墙*/ function addLightWall() {const geometry = new THREE.BufferGeometry();const vertices = new Float32Array([5, 0, 2,3, 0, 5,-2, 0, 5,-4, 0, 2,-4, 5, 2,-2, 5, 5,3, 5, 5,5, 5, 2]);const indic…

2024年youtube 视频在线下载工具

1.youtube to wav这是一个将 YouTube 视频转换为 WAV 格式的在线工具的网站链接。根据提供的信息,使用该工具的步骤如下: 开始:将 YouTube 视频的 URL 粘贴到搜索框中,然后点击 “Start” 按钮。 转换:选择转换为 WAV 的质量(推荐使用默认选项),然后点击 “Convert” 按…

Idea 配置多端口启动参数

1、编辑配置2、在弹出配置中增加要使用端口接口,添加端口参数配置、设置VM options: 参数值为: -Dserver.port= portNumber下面以应用 TranSendServiceApplication 为例,增加两个端口:8099 和8091 为例。截图如下: