
Agents talking to MCP Server, SSL verification is failing. Has some been through this?
快速结论:该报错通常发生在 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」项。
解决步骤
- 修复服务器证书链(可优先尝试):如果检查发现缺少中间证书,在服务器或负载均衡器上修复配置。例如将中间证书拼接到
fullchain.pem,或使用 Let’s Encrypt / ACME 签发的正确证书。 - 配置客户端 CA 包:如果使用私有 CA,设置环境变量使 httpx 信任自定义 CA 包:
export SSL_CERT_FILE=/path/to/ca-bundle.pem # 或 export SSL_CERT_DIR=/path/to/ca-certs/httpx 会直接读取这些环境变量。
- 注意:如果通过 CrewAI 的
MCPServerAdapter调用,更深入的 httpx 自定义(如自定义ssl.SSLContext或httpx_client_factory)需要在 CrewAI 层面做适配,MCP Python SDK 当前不涉及此层。
验证方法
重新运行 Agent,观察是否仍出现 SSL: CERTIFICATE_VERIFY_FAILED 错误。如果之前使用 curl 测试失败,修复后 curl 也应能正常连接。



