【SSL證書校驗問題】通過 monkey-patch 關掉 SSL 證書校驗

標簽:Python、SSL、monkey-patch、httpx、aiohttp、requests、OpenAI


1 為什么會有這篇文章?

在本地調試 OpenAI 代理、數據抓取、私有服務、訪問外網 時,經常會碰到如下報錯:

SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed
raise SSLError(e, request=request)
requests.exceptions.SSLError: HTTPSConnectionPool(host='api.openai.com', port=443): Max retries exceeded with url: /v1/models (Caused by SSLError(SSLError(1, '[SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:1017)')))
File ".venv\lib\site-packages\httpx\_transports\default.py", line 118, in map_httpcore_exceptions|     raise mapped_exc(message) from exc| httpx.ConnectError: All connection attempts failed
An error occurred: Expecting value: line 1 column 1 (char 0)
An error occurred during the request: HTTPSConnectionPool(host='en.wikipedia.org', port=443): Max retries exceeded with url: /w/api.php?list=search&srprop=&srlimit=1&limit=1&srsearch=langchain&format=json&action=query (Caused by ProxyError('Unable to connect to proxy', SSLError(SSLEOFError(8, '[SSL: UNEXPECTED_EOF_WHILE_READING] EOF occurred in violation of protocol (_ssl.c:1000)'))))
 File ".venv\lib\site-packages\requests\adapters.py", line 698, in sendraise SSLError(e, request=request)
requests.exceptions.SSLError: HTTPSConnectionPool(host='r.jina.ai', port=443): Max retries exceeded with url: /https://baijiahao.baidu.com (Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate in certificate chain (_ssl.c:997)')))

為了快速定位 “是不是證書問題” 而不是“邏輯問題”,我們需要臨時零侵入地把所有 HTTP 客戶端的 SSL 校驗關掉。
把下面這段腳本調用后就能跑,調試結束直接刪除,零副作用
或者為了臨時繞過所有SSL證書驗證,使代碼邏輯跑通。


2 完整代碼(復制即用)

def monkey_patch():"""通過關閉 SSL/TLS 證書驗證,解決 ssl 驗證引發的 443 超時問題(注:臨時調試使用,生產務必移除)"""import functools# 1) 全局標準庫 SSL 上下文try:import ssl# 全局取消證書驗證ssl._create_default_https_context = ssl._create_unverified_contextexcept Exception:pass# 2) httpx 同步 & 異步try:import httpxhttpx.Client.__init__ = functools.partialmethod(httpx.Client.__init__, verify=False)httpx.AsyncClient.__init__ = functools.partialmethod(httpx.AsyncClient.__init__, verify=False)except Exception:pass# 3) OpenAI 私有 AsyncHttpxClientWrappertry:import openai._base_client as bc_old = bc.AsyncHttpxClientWrapper.__init__def _new_init(self, *a, **k):k.setdefault("verify", False)return _old(self, *a, **k)bc.AsyncHttpxClientWrapper.__init__ = _new_initexcept Exception:pass# 4) aiohttptry:import aiohttpaiohttp.TCPConnector.__init__ = functools.partialmethod(aiohttp.TCPConnector.__init__, verify_ssl=False)except Exception:pass# 5) requeststry:import requestsfrom functools import wraps# 5-1) 修改 Session 實例默認屬性_orig_init = requests.Session.__init__@wraps(_orig_init)def _patched_init(self):_orig_init(self)self.verify = Falserequests.Session.__init__ = _patched_init# 5-2) 快捷函數補丁: 防止它們內部 new Session 時傳 verifyfor name in ("get", "post", "put", "patch", "delete", "head", "options"):_orig = getattr(requests, name)setattr(requests,name,(lambda _o: lambda *a, **k: _o(*a, **dict(k, verify=False)))(_orig),)except Exception:pass

使用:

# 在業務邏輯最頂部調用即可
monkey_patch()

3 逐段技巧拆解

位置技巧一句話解釋
ssl._create_default_https_context = ...全局鉤子把標準庫 HTTPS 默認上下文換成“不校驗”。
functools.partialmethod一行改默認參數不繼承、不派生,直接把類方法的形參默認值改掉。
setdefault("verify", False)不覆蓋顯式傳參只在用戶沒傳時兜底,傳了 True 仍然生效。
@wraps棧信息不丟失調試時能看到原函數名,而不是 <lambda>
except Exception:不吞系統信號保留 KeyboardInterruptSystemExit,腳本可 Ctrl-C。

4 何時刪除?

場景建議
單測/本地調試保留
代碼評審 / 上線必須刪除
CI / Docker用環境變量 SSL_NO_VERIFY=1 控制開關,而非硬編碼

5 延伸閱讀

  • Python 官方文檔:ssl.create_default_context
  • httpx 文檔:verify
  • requests 文檔:Session.verify

一句話總結
通過侵入式修改,關掉全部 SSL 校驗;調試完刪掉,干凈不留痕。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/91078.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/91078.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/91078.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

VMWARE -ESXI-ntp時間同步無法啟動異常處理

從服務界面查看NTP服務是停止的&#xff08;手動啟動無效&#xff09;嘗試到系統-時間設置-添加服務-網絡時間協議&#xff0c;添加阿里云NTP服務器&#xff08;網絡可達&#xff09; ntp.aliyun.com 點擊確定報錯-無法更改主機配置出現上面的情況多半是DNS沒有設置ssh登錄到服…

yolo11分類一鍵訓練工具免安裝環境windows版使用教程

這個是windows上用于yolo11分類訓練工具&#xff0c;不需要寫代碼只需要按照要求擺放好分類圖片文件夾就可以訓練。軟件內置cuda和python模塊&#xff0c;因此不需要安裝python環境和cuda就可以使用。注意需要電腦配備有nvidia顯卡才能使用。要求顯存>4GB。首先我們打開軟件…

2025年-ClickHouse 高性能實時分析數據庫(大綱版)

告別等待&#xff0c;秒級響應&#xff01;這不只是教程&#xff0c;這是你駕馭PB級數據的超能力&#xff01;我的ClickHouse視頻課&#xff0c;凝練十年實戰精華&#xff0c;從入門到精通&#xff0c;從單機到集群。點開它&#xff0c;讓數據處理速度快到飛起&#xff0c;讓你…

深入理解 Scikit-learn:機器學習實戰的科學之道與避坑指南

掌握工具易&#xff0c;領悟其道難——本文帶你穿透API表面&#xff0c;直擊工業級機器學習實踐的核心邏輯。作為一名長期耕耘在機器學習研究與工業應用一線的從業者&#xff0c;我見過太多因誤用 sklearn 而導致的模型失效案例。從數據泄露到評估失真&#xff0c;從特征處理失…

Android 調試橋 (adb) 基礎知識點

Android 調試橋 (adb) 是一種功能多樣的命令行工具&#xff0c;可讓您與安卓手機進行通信。常用于輔助測試開發或定位問題。 一、adb的工作原理 &#x1f31f; 啟動服務器進程&#xff1a;檢查是否adb服務器進程正在運行&#xff0c;若沒有則啟動。 啟動或關閉adb服務&#xff…

AW2013 LED驅動芯片 工作方式介紹

根據您上傳的 AW2013 芯片手冊&#xff0c;我將為您分三個部分詳細解讀&#xff1a;一、芯片簡介&#xff08;AW2013 概述&#xff09; AW2013 是一款 3 通道的 IC 控制恒流 LED 驅動芯片&#xff0c;支持以下功能&#xff1a;單通道最大恒流輸出&#xff1a;15mA&#xff0c;支…

node.js中的fs與path模塊

前言 什么是Node.js&#xff1f; Node.js 是一個開源和跨平臺的 JavaScript 運行時環境 Node.js 在瀏覽器之外運行 V8 JavaScript 引擎&#xff0c;即 Google Chrome 的核心。一、fs模塊基礎 1. 引入fs模塊 const fs require(fs);2. 同步與異步方法 fs模塊提供了同步和異步兩種…

C# 靜態類_靜態方法_靜態字段(static 聲明靜態的關鍵字 )

靜態類里面的所有成員都必須得是靜態的&#xff0c;是不能被實例化的(不能用對象調用)&#xff0c;不能在靜態類中聲明實例&#xff08;非靜態&#xff09;字段 屬性 方法 靜態方法中也只能訪問靜態字段&#xff0c; 普通方法中不管數據是不是靜態都能使用1、定義一個靜態類 //…

MRDIMM對服務器總體擁有成本(TCO)影響的系統性分析

以下是針對MRDIMM對服務器總體擁有成本&#xff08;TCO&#xff09;影響的系統性分析&#xff0c;結合技術特性與經濟性指標&#xff1a;一、MRDIMM降低TCO的核心機制帶寬效率提升 MRDIMM通過數據緩沖器實現雙Rank并行傳輸&#xff0c;單次數據傳輸量從標準RDIMM的64字節提升至…

c# openxml 打開加密 的word讀取內容

using System; using System.IO; using System.Linq; using System.Text; using DocumentFormat.OpenXml; using DocumentFormat.OpenXml.Packaging; using DocumentFormat.OpenXml.Wordprocessing;/// <summary> /// 使用OpenXML獲取文檔內容&#xff0c;替代Aspose方式…

【SpringAI實戰】ChatPDF實現RAG知識庫

一、前言 二、實現效果 三、代碼實現 3.1 后端代碼 3.2 前端代碼 一、前言 Spring AI詳解&#xff1a;【Spring AI詳解】開啟Java生態的智能應用開發新時代(附不同功能的Spring AI實戰項目)-CSDN博客 二、實現效果 實現一個非常火爆的個人知識庫AI應用&#xff0c;ChatPDF…

Qt小組件 - 8 圖片瀏覽器

一個自制的圖片瀏覽器&#xff0c;如果不想安裝qfluentwidgets&#xff0c; CommandBarView可以使用QWidgetQPushButton替代安裝 qfluentwidgets pip install PySide6-Fluent-Widgets[full]代碼示例 # coding: utf-8 from typing import Unionfrom PySide6.QtCore import Qt, Q…

R study notes[1]

文章目錄introducing to Rreferencesintroducing to R R is an integrated suite involved data handling,storage facility,calculations on arrays,tools for data analysis and so on.running the command R in the terminal of OS can start R software.in R terminal ,to…

由于主庫切換歸檔路徑導致的 Oracle DG 無法同步問題的解決過程

由于主庫切換歸檔路徑導致的 Oracle DG 無法同步問題的解決過程 在上一篇文章中&#xff0c;由于 Oracle 數據庫的歸檔日志空間耗盡導致客戶端無法連接數據庫。在解決的過程中臨時修改了歸檔路徑。后來通過修改參數db_recovery_file_dest_size的值解決了問題。 但該操作導致DG無…

密碼學與加密貨幣:構建去中心化信任的技術基石與未來挑戰

密碼學是加密貨幣的技術基石&#xff0c;兩者通過數學原理構建去中心化信任體系。以下從技術原理、應用場景及未來挑戰三方面展開分析&#xff1a;一、密碼學基礎&#xff1a;加密貨幣的安全基石非對稱加密體系公鑰與私鑰&#xff1a;基于橢圓曲線密碼學&#xff08;ECC&#x…

用于 Web 認證的 抗量子簽名——ML-DSA 草案

1. 引言 本文描述了在 Web Authentication (WebAuthn) 中實現無密碼認證&#xff08;Passwordless authentication&#xff09;的方法&#xff0c;該方法使用模塊格&#xff08;Module-Lattice&#xff09;為基礎的數字簽名標準&#xff08;ML-DSA&#xff09;&#xff0c;即 …

ubuntu18.04解壓大的tar.gz文件失敗

1. 問題描述 我在vmware的虛擬機裝有petalinux環境&#xff0c;需要解壓downloads_2020.2.tar.gz這個大的壓縮包文件&#xff0c;但是總是失敗&#xff0c;而且過程很漫長 tar: downloads/git2/github.com.vim.vim.git/objects/pack/pack-f7f2e2add0c8972a9141b557ef725c38069…

App拉起:喚醒即達,告別繁瑣操作

在移動互聯網進入存量競爭的今天&#xff0c;“讓用戶少點一次、少等一秒”往往意味著20%以上的轉化率差異。openinstall把這套體驗總結成一套可落地的App拉起方案&#xff1a;一套SDK一組鏈接跳轉規則一個可自定義的落地頁&#xff0c;就能把Web→App的整條動線縮成一次點擊。…

開發指南125-HTML DOM事件

1、onload和onunload在頁面或某個元素加載完成后或離開后觸發事件。2、onchange用于在元素的值發生變化時觸發事件。一般用于<input>, <select>, <textarea>等元素3、onfocus 和 onblur激活或失去焦點時觸發4、onmouseover 和 onmouseout鼠標移入或移除時觸發…

使用redis 作為消息隊列時, 如何保證消息的可靠性

使用Redis作為消息隊列時&#xff0c;如何保證消息的可靠性 在分布式系統中&#xff0c;消息隊列扮演著不可或缺的角色&#xff0c;它能夠有效地實現服務間的解耦和異步通信。Redis憑借其出色的性能&#xff0c;常常被用作輕量級的消息隊列。然而&#xff0c;Redis本質上是一個…