首页 > 其他分享 >SSL: CERTIFICATE_VERIFY_FAILED 问题

SSL: CERTIFICATE_VERIFY_FAILED 问题

时间:2024-09-13 20:13:28浏览次数:1  
标签:存储 CERTIFICATE 证书 SSL FAILED 模块 pip ssl certifi

使用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 truststore

ctx = truststore.SSLContext(ssl.PROTOCOL_TLS_CLIENT)

http = urllib3.PoolManager(ssl_context=ctx)
resp = http.request("GET", "https://example.com")

标签:存储,CERTIFICATE,证书,SSL,FAILED,模块,pip,ssl,certifi
From: https://www.cnblogs.com/rolandhe/p/18412766

相关文章

  • AnolisOS-7.9编译升级安装 OpenSSH_9.8p1+OpenSSL 3.3.0+zlib1.3.1
     实验镜像AnolisOS-7.9-QU1-x86_64-dvd.iso安装过程内核选择3.x #安装必备和常用软件包#安装相关的依赖项,如有遗漏再次安装yuminstall-y perl-IPC-Cmdvimmakegccwgettarlrzsznet-tools #安装zlib./configure--prefix=/usr/local/zlibmake&&makei......
  • ubuntu-22.04.4编译升级安装 OpenSSH_9.8p1+OpenSSL 3.3.2+zlib1.3.1
     实验镜像ubuntu-22.04.4-live-server-amd64.iso#安装必备和常用软件包#安装相关的依赖项,如有遗漏再次安装aptinstall-y libz-devvimgccwgettarlrzsznanomakenet-tools #安装zlib./configure--prefix=/usr/local/zlibmake&&makeinstall #安装......
  • DELL戴尔PowerEdge服务器PERC阵列Failed离线Offline数据恢复RAID
    针对DELL戴尔PowerEdge服务器中PERC阵列出现Failed离线或Offline状态的数据恢复问题,以下是一个详细的恢复流程和注意事项:一、初步评估与诊断确认故障现象:1.登录服务器管理界面,检查PERC阵列的状态,确认是否显示为Failed、Offline或其他异常状态。记录所有相关的错误信息和日志,以......
  • [基于 Vue CLI 5 + Vue 3 + Ant Design Vue 4 搭建项目] 03 使用 npm 安装依赖出现 ce
    文章目录问题描述解决问题1.修改镜像源2.清理缓存3.临时禁用SSL证书验证4.再次安装依赖问题描述在使用npminstall进行按安装依赖的时候出现了下面错误npmerrorcodeCERT_HAS_EXPIREDnpmerrorerrnoCERT_HAS_EXPIREDnpmerrorrequesttohttps://registr......
  • 推动国密SSL发展的建议与策略
    摘要:国密SSL作为我国网络安全的重要组成部分,其发展对于保障国家信息安全具有重要意义。本文针对国密SSL当前发展现状,提出了几点发展建议,旨在推动国密SSL技术的广泛应用和市场竞争力。一、引言国密SSL(SecureSocketsLayer)是指采用国家商用密码算法的SSL证书,它在我国网络安全......
  • Docker Desktop 启动失败:Docker failed to initialize
    docker启动报错解决方案:删除 C:\Users\Administrator\AppData\Roaming\Docker文件夹文件夹删除后,会弹出下面的窗口,点击“OK”:点击“OK”后会可能会弹出下面的窗口,点击“Start”点击“Start”后,会进入DockerDesktop的启动向导窗口,依次点击“Start”->“NextStep” -......
  • 银河麒麟服务器V10 编译升级安装 OpenSSH_9.8p1+OpenSSL 3.3.0+zlib1.3.1
    测试镜像Kylin-Server-V10-SP3-2403-Release-20240426-x86_64.iso #安装必备和常用软件包yum-yinstallgccmakevimwgettelnetnet-toolstcpdumptarperlnc #安装zlib./configure--prefix=/usr/local/zlibmake&&makeinstall #安装openssl./confi......
  • 【学习笔记】SSL证书密码套件之加密
    本篇将介绍密码套件中加密常用的协议并将他们进行比较,包括:CHACHA20、AES-256-GCM、AES-128-GCM、AES-256-CBC、AES-128-CBC、3DES-CBC、RC4-128、DES-CBC一、概念(选择以上合适协议)对称加密算法目的是保护批量数据传输流密码(StreamCiphers)CHACHA20、RC4-128StreamCi......
  • 基于OpenSSL的密码管理系统-应用密码学课程报告
    第1章概要设计1.1设计目的本研究旨在设计并实现一个基于OpenSSL的密码管理系统,该系统具备密钥对的生成、密钥上传、密钥的核对、身份认证、文件与邮件的加密和解密、数字签名及数字证书管理等常用功能。研究的意义主要体现在以下几个方面:提升网络信息安全水平:通过集成多种密......
  • java学习之HttpClient忽略安全证书(SSLContext)
    1.我们在写https请求时候,经常会遇见安全证书(SSL)验证失败的情况,如下图。 上图异常就是因为SSL验证失败导致的,常规的做法是忽略证书认证。方法如下:第一步:需要重写认证的证书类 X509ExtendedTrustManager。第二步:创建SSLContext对象。第三步:将SSLContext对象设置到HttpClien......