OpenSSL 无法验证 DevSidecar 的自签名证书

文章目录

  • [1:使用 -CAfile 指定自签名证书本身作为 CA](#1:使用 -CAfile 指定自签名证书本身作为 CA)
  • 2:将自签名证书添加到系统信任库
  • [3:配置 Python 直接信任该证书](#3:配置 Python 直接信任该证书)
    • [方法 1 : 在 Python 代码中指定证书路径:](#方法 1 : 在 Python 代码中指定证书路径:)
    • [方法 2: 设置 REQUESTS_CA_BUNDLE 环境变量](#方法 2: 设置 REQUESTS_CA_BUNDLE 环境变量)

执行 openssl verify /usr/local/share/ca-certificates/dev-sidecar.ca.crt 报错

txt 复制代码
CN = DevSidecar - This certificate is generated locally, C = CN, ST = GuangDong, L = ShenZhen, O = dev-sidecar, OU = https://github.com/docmirror/dev-sidecar
error 18 at 0 depth lookup: self-signed certificate
error /usr/local/share/ca-certificates/dev-sidecar.ca.crt: verification failed

这个错误表明 OpenSSL 无法验证 DevSidecar 的自签名证书,因为它是自签名的(self-signed),默认不受系统信任。以下是解决方案:

1:使用 -CAfile 指定自签名证书本身作为 CA

由于证书是自签名的,你可以将证书本身作为 CA 文件来验证:

bash 复制代码
openssl verify -CAfile /usr/share/ca-certificates/dev-sidecar.ca.crt /usr/share/ca-certificates/dev-sidecar.ca.crt

如果证书是有效的自签名证书,这会显示 OK

2:将自签名证书添加到系统信任库

如果你希望系统全局信任该证书(例如用于 HTTPS 或其他服务),可以:

  1. 在 Debian/Ubuntu 上:
bash 复制代码
sudo cp /usr/share/ca-certificates/dev-sidecar.ca.crt /usr/local/share/ca-certificates/
sudo update-ca-certificates
  1. 在 RHEL/CentOS 上:
bash 复制代码
sudo cp /usr/share/ca-certificates/dev-sidecar.ca.crt /etc/pki/ca-trust/source/anchors/
sudo update-ca-trust

将自签名证书添加到系统的信任库,使其被系统全局信任(例如用于 HTTPS、curl、wget 等)。Ubuntu 的系统 CA 证书存储在 /etc/ssl/certs/,你可以检查是否生成了对应的符号链接!

3:配置 Python 直接信任该证书

在 Ubuntu 上,即使你已经将自签名证书添加到系统信任库(/usr/local/share/ca-certificates/ 并运行 update-ca-certificates),Python 的 requests 库可能仍然报错 SSLError: unable to get local issuer certificate,原因可能是:

  1. Python requests 不使用系统 CA 存储

    • 默认情况下,requests 使用的是它自己的 CA 证书包(通常是 certifi 提供的),而不是系统的 /etc/ssl/certs/。
    • 即使系统信任了你的自签名证书,requests 仍然可能找不到它。
  2. 证书链不完整

    • 如果你的自签名证书是中间 CA 证书(intermediate CA),而 requests 需要完整的证书链(root CA + intermediate CA),但你的证书可能只包含其中一部分。
  3. Python SSL 模块未正确加载系统 CA

    • 某些情况下,Python 的 ssl 模块可能没有正确加载系统的 CA 证书。

方法 1 : 在 Python 代码中指定证书路径:

python 复制代码
import os
os.environ['REQUESTS_CA_BUNDLE'] = '/usr/local/share/ca-certificates/dev-sidecar.ca.crt'

# 然后再加载模型
from sentence_transformers import SentenceTransformer
model = SentenceTransformer('all-MiniLM-L6-v2')

方法 2: 设置 REQUESTS_CA_BUNDLE 环境变量

让 requests 使用自定义的 CA 包:

bash 复制代码
export REQUESTS_CA_BUNDLE=/etc/ssl/certs/ca-certificates.crt

或者在 Python 代码中设置:

python 复制代码
import os
os.environ["REQUESTS_CA_BUNDLE"] = "/etc/ssl/certs/ca-certificates.crt"

response = requests.get("https://github.com")
print(response.status_code)
相关推荐
Muyuan19983 分钟前
28.Paper RAG Agent 开发记录:修复 LLM Rerank 的解析、Fallback 与可验证性
linux·人工智能·windows·python·django·fastapi
代码小书生14 分钟前
statistics,一个统计的 Python 库!
开发语言·python
STLearner1 小时前
SIGIR 2026 | LLM × Graph论文总结(图增强LLM,GraphRAG,Agent,多模态,知识图谱,搜索,推
人工智能·python·深度学习·神经网络·机器学习·数据挖掘·知识图谱
FreakStudio1 小时前
MicroPython 内核开发者直接狂喜!这个 Claude 插件市场,把开发全流程做成了「对话式外挂」
python·单片机·嵌入式·面向对象·并行计算·电子diy
老陈说编程1 小时前
12. LangChain 6大核心调用方法:invoke/stream/batch同步异步全解析,新手也能轻松学会
开发语言·人工智能·python·深度学习·机器学习·ai·langchain
给自己做减法1 小时前
rag混合检索
人工智能·python·rag
2301_812539672 小时前
Golang怎么实现网页爬虫抓取数据_Golang如何用colly框架快速构建爬虫采集程序【教程】
jvm·数据库·python
xcbrand2 小时前
政府事业机构品牌策划公司哪家可靠
大数据·人工智能·python
爱滑雪的码农4 小时前
Java基础十一 流(Stream)、文件(File)和IO
java·开发语言·python
knight_9___4 小时前
LLM工具调用面试篇5
人工智能·python·深度学习·面试·职场和发展·llm·agent