Vertex AI 向量数据库检索器错误:CERTIFICATE_VERIFY_FAILED 解决方案
2025-03-23 00:11:13
Vertex AI 向量数据库检索器遭遇 OPENSSL_internal:CERTIFICATE_VERIFY_FAILED 错误
在使用 Langchain、Vertex AI 向量数据库和 GPT-4 构建 GenAI 应用时, 调用向量数据库检索器 (vector_store retriever) 出现 OPENSSL_internal:CERTIFICATE_VERIFY_FAILED
错误。 即使创建向量数据库索引时使用了相同的凭据,问题依旧存在。 下面我们来一步步分析原因, 并给出解决方法。
一、 问题原因分析
这个错误通常指向 SSL/TLS 证书验证环节。CERTIFICATE_VERIFY_FAILED
明确表明客户端(你的代码)无法验证服务器(Vertex AI Matching Engine)提供的 SSL/TLS 证书。 原因可能有以下几种:
- 系统时间不同步: 客户端系统时间与服务器时间偏差过大,导致证书有效期校验失败。
- 证书链问题: 服务器使用的证书链不完整,或者客户端缺少必要的根证书或中间证书。
- 代理问题: 如果你的网络环境使用了代理服务器,代理服务器可能未正确配置 SSL/TLS 终端或转发证书。
- 环境问题 系统未正确设置或更新CA证书, 导致对google相关证书不信任
- VertexAI SDK 或相关库的 BUG 少数情况下, 是因为版本不兼容问题.
二、 解决方案
针对上述可能的原因,下面提供一系列解决方案,你可以逐一尝试:
1. 校准系统时间
确保运行代码的机器时间准确。可以使用 NTP 服务自动同步时间。
Linux (Ubuntu/Debian):
sudo apt-get install ntp
sudo ntpdate ntp.ubuntu.com
之后可以使用date
命令检查.
Windows:
在“日期和时间”设置中,启用“自动设置时间”和“自动设置时区”。
2. 更新 CA 证书包
客户端需要信任 Google 的根证书。更新系统的 CA 证书包通常可以解决问题。
Linux (Ubuntu/Debian):
sudo apt-get update
sudo apt-get install --reinstall ca-certificates
Linux (CentOS/RHEL):
sudo yum update ca-certificates
Python 环境(使用 requests
库):
如果你使用 requests
库,可以尝试更新 certifi
包:
pip install --upgrade certifi
3. 检查并配置代理 (如果使用代理)
如果你在使用代理服务器,请确保:
- 代理服务器配置为正确处理 SSL/TLS 连接。
- 代理服务器信任 Google 的根证书。
- 在代码中正确配置了代理。
如果你的代码使用 requests
,可以通过环境变量或直接在代码中设置代理:
import os
import requests
# 通过环境变量设置
os.environ['HTTP_PROXY'] = 'http://your_proxy_address:port'
os.environ['HTTPS_PROXY'] = 'http://your_proxy_address:port'
# 或者在代码中设置
proxies = {
'http': 'http://your_proxy_address:port',
'https': 'http://your_proxy_address:port',
}
# 使用 requests 发送请求时
# response = requests.get(url, proxies=proxies)
4. 显式指定 CA 证书路径 (requests, 部分 Python 环境)
有时, Python 环境可能无法自动找到系统 CA 证书,需要手动指定。
可以使用REQUESTS_CA_BUNDLE
环境变量来解决。
- 找到你的 CA 证书文件路径: 多数情况下是 pem 格式的文件,具体路径需要根据操作系统和 Python 环境来确定。 上面安装
certifi
包后,certifi.where()
可以返回它的证书位置。 - 设置环境变量
REQUESTS_CA_BUNDLE
: 将该环境变量设为证书文件的完整路径。
export REQUESTS_CA_BUNDLE=/path/to/your/ca-certificates.pem
你也可以在 Python 代码中设置:
import os
os.environ['REQUESTS_CA_BUNDLE'] = '/path/to/your/ca-certificates.pem'
在langchain
代码运行前指定,即可。
5. Vertex AI SDK 和相关库版本
确认 google-cloud-aiplatform
、langchain
和其他相关库是最新版本, 或者是兼容的版本。旧版本有时会出现兼容性问题或 BUG。
pip install --upgrade google-cloud-aiplatform langchain
6. 检查凭据
仔细检查你的服务账号的JsonKey文件,是否包含了所需的权限,且服务账号在Google Cloud 控制台中是否处于激活状态。有时候JsonKey文件是错的,也会引发类似的SSL连接问题。
7. 绕过证书验证 (仅用于测试!)
强烈不建议在生产环境中使用此方法! 这样做会使你的应用面临中间人攻击的风险。 仅在绝对确信网络环境安全,且用于调试或临时测试时,可以考虑禁用证书验证。
修改代码, verify=False
, 来绕过 requests
中的证书校验。如果不是直接调用 requests
,而是通过其他库间接调用,需要找到相应的设置。Langchain 中不太容易直接修改底层 requests
库的设置,因此该方法通常只适用于调试。
重要:绝对不要在生产环境中使用此方法!
进阶技巧: 证书调试
如果怀疑是Google返回的证书有问题,或者代理篡改了证书,可以使用openssl
命令进行调试
openssl s_client -connect your_vertex_ai_endpoint:443 -showcerts
your_vertex_ai_endpoint
替换为你的服务的地址和端口号. 输出会展示证书链等详细信息.检查:
* 证书是否过期。
* 证书链是否完整。
* 证书的颁发机构 (CA) 是否受信任.
* hostname 是否符合.
通过检查这些问题,可以确认是客户端配置错误,还是证书本身有问题.
根据这些信息,再进一步对症下药。