Windows系统证书损坏导致的SSL致命错误以及docker下载问题解决办法
作者:Feynman’s boom
一、前言
之前下载python运行环境都依赖Windows系统的根证书出现了这个错误,报错就显示说aiohttp库尝试加载 Windows 系统根证书时,发现证书存储中存在数据不完整或格式损坏的证书,导致 SSL 上下文初始化失败。 ssl.SSLError: [ASN1: NOT_ENOUGH_DATA]
除此以外,下载docker desktop遇见了WSL错误,导致出现docker乱码和 0xffffffff 错误。

排查一圈后发现可能是安装了某些软件、杀毒软件或企业安全代理(如 Cisco AnyConnect, Zscaler)之后它们可能会修改系统证书存储;或者说中啥病毒了,之前也没有乱删除什么系统文件。
二、报错原因
datasets库 → aiohttp库 → ssl模块 → 加载Windows系统证书 → 发现损坏证书/格式不正确 → 抛出ASN1解析错误。所以任何使用aiohttp/requests的Python库都会出现这个错误。
三、解决方案
1.docker乱码和 0xffffffff 错误

我遇到的是最经典的旧版 WSL 问题:--version参数是WSL 2.0 + 版本才有的,你的系统里安装的是 Windows 自带的老旧 "收件箱" 版 WSL 1,这也是 Docker Desktop 报错的根本原因(新版 Docker 只支持 WSL 2)。
(1)卸载现有内核,重新安装WSL内核即可。
# 直接在管理员PowerShell中执行以下命令自动下载安装 #执行这个关键命令,直接从微软官网下载最新 WSL 2(跳过 Microsoft Store): wsl --update --web-download #等待下载安装完成,会提示 "已成功更新适用于 Linux 的 Windows 子系统" #必须重启电脑,这一步绝对不能跳过!
(2)等待安装完成后,再次测试:
#在powershell中输入 wsl --version
此时应该能正常显示版本信息,没有乱码。
✅ 成功标志:正常显示类似以下的版本信息(没有乱码,没有 "命令行选项无效")
WSL 版本: 2.3.24.0 内核版本: 5.15.153.1-2 WSLg 版本: 1.0.65 MSRDC 版本: 1.2.5620 Direct3D 版本: 1.611.1-81528511 DXCore 版本: 10.0.26091.1-240330-1435.ge-release Windows 版本: 10.0.22631.3880
2.ssl系统证书错误
(1)换更稳定的requests库来替代 aiohttp库 (一个异步 HTTP 库),这样可以完全避开对aiohttp的依赖,从而绕过这个 SSL 错误。这里以调用搜索工具查天气为例子。
from langgraph.prebuilt import ToolNode
from langgraph.graph import StateGraph, MessagesState, START, END
from langchain.chat_models import init_chat_model
# 1. 删除这行:from langchain_tavily import TavilySearch
import requests
import os
from dotenv import load_dotenv
from langchain.tools import tool
load_dotenv()
llm = init_chat_model(api_key=os.getenv("DASHSCOPE_API_KEY"),
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
model_provider="openai",
model='MiniMax-M2.1')
# 2. 使用 @tool 自定义工具,直接请求 Tavily API
@tool
def tavily_search_tool(query: str) -> str:
"""这是一个搜索工具"""
api_key = os.getenv("TAVILY_API_KEY")
if not api_key:
return "Error: TAVILY_API_KEY not found in environment variables."
url = "https://api.tavily.com/search"
payload = {
"api_key": api_key,
"query": query,
"search_depth": "basic",
"max_results": 5
}
try:
response = requests.post(url, json=payload)
response.raise_for_status()
data = response.json()
# 这里简单返回结果,也可以根据 data['answer'] 或 data['results'] 进行格式化
return str(data)
except Exception as e:
return f"Error occurred during search: {str(e)}"
tool_node = ToolNode([tavily_search_tool])
model_with_tools = llm.bind_tools([tavily_search_tool])
def should_continue(state: MessagesState):
messages = state["messages"]
last_message = messages[-1]
if last_message.tool_calls:
return "tools"
return END
def call_model(state: MessagesState):
messages = state["messages"]
response = model_with_tools.invoke(messages)
return {"messages": [response]}
builder = StateGraph(MessagesState)
builder.add_node("call_model", call_model)
builder.add_node("tools", tool_node)
builder.add_edge(START, "call_model")
builder.add_conditional_edges("call_model", should_continue, ["tools", END])
builder.add_edge("tools", "call_model")
graph = builder.compile()
print(graph.invoke({"messages": [{"role": "user", "content": "明天北京的天气如何?"}]}))
(2)直接删除高频损坏证书,再让系统自动更新恢复干净证书
总结
到此这篇关于Windows系统证书损坏导致的SSL致命错误以及docker下载问题解决办法的文章就介绍到这了,更多相关SSL致命错误及docker下载问题内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
