Agents talking to MCP Server, SSL verification is failing. Has some been through this?

用户使用 CrewAI 的 MCPServerAdapter 连接已部署的 MCP Server(运行在非 localhost 地址)。本地运行正常,但更换为远程 URL 后触发 SSL 验证错误。

快速结论:该报错通常发生在 MCP Agent 通过 CrewAI 等框架连接已部署的 MCP Server 时,因服务器 TLS 证书链不完整或使用了私有 CA 导致 SSL 握手失败。优先使用 openssl s_client 或 SSL Labs 检查服务器证书链是否完整。

问题场景

用户使用 CrewAI 的 MCPServerAdapter 连接已部署的 MCP Server(运行在非 localhost 地址)。本地运行正常,但更换为远程 URL 后触发 SSL 验证错误。

报错原文

httpx.ConnectError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1016)

原因分析

这是典型的 TLS 信任存储问题,而非 MCP Python SDK 的 Bug。SDK 直接将 URL 传递给 httpx,而 httpx 报告服务器返回的证书链无法通过本地的 CA 包验证。最可能原因是:

  • 服务器 TLS 证书链不完整:浏览器会自动补全缺失的中间证书,但 Python(依赖系统 CA 包)不会。这是 unable to get local issuer certificate 最常见的诱因。
  • 私有 CA 证书:如果服务器使用了内部私有 CA 颁发的证书,则需要将对应的根 CA 证书添加到客户端的信任列表中。

环境排查

  • 确认 MCP Server 部署的域名/IP 及端口(如 your-host:443)。
  • 从运行 Agent 的机器上使用 curl 测试同一端点。
    curl https://your-host/path

    如果 curl 同样报错,则问题确认为服务器证书链。

  • 使用 openssl s_client 检查证书链完整性:
    openssl s_client -connect your-host:443 -showcerts </dev/null
  • 可使用 SSL Labs(ssllabs.com/ssltest)输入域名,查看「Chain issues」项。

解决步骤

  1. 修复服务器证书链(可优先尝试):如果检查发现缺少中间证书,在服务器或负载均衡器上修复配置。例如将中间证书拼接到 fullchain.pem,或使用 Let’s Encrypt / ACME 签发的正确证书。
  2. 配置客户端 CA 包:如果使用私有 CA,设置环境变量使 httpx 信任自定义 CA 包:
    export SSL_CERT_FILE=/path/to/ca-bundle.pem
    # 或
    export SSL_CERT_DIR=/path/to/ca-certs/

    httpx 会直接读取这些环境变量。

  3. 注意:如果通过 CrewAI 的 MCPServerAdapter 调用,更深入的 httpx 自定义(如自定义 ssl.SSLContexthttpx_client_factory)需要在 CrewAI 层面做适配,MCP Python SDK 当前不涉及此层。

验证方法

重新运行 Agent,观察是否仍出现 SSL: CERTIFICATE_VERIFY_FAILED 错误。如果之前使用 curl 测试失败,修复后 curl 也应能正常连接。

参考来源

modelcontextprotocol/python-sdk #1628

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 18324

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注