[Bug]: 对话(0)请求失败: N8nAPIError n8n webhook call exception: Cannot connect to host 10.1.9.133:443 ssl:True [SSLCertVerificationError: (1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1000)')]
Runtime environment
4.5.0
Exception
[11-13 15:30:44.330] n8nsvapi.py (154) - [ERROR] : n8n webhook call exception: Cannot connect to host 10.1.9.133:443 ssl:True [SSLCertVerificationError: (1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1000)')] [11-13 15:30:44.330] chat.py (114) - [ERROR] : 对话(0)请求失败: N8nAPIError n8n webhook call exception: Cannot connect to host 10.1.9.133:443 ssl:True [SSLCertVerificationError: (1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1000)')]
Reproduction steps
[11-13 15:30:44.330] n8nsvapi.py (154) - [ERROR] : n8n webhook call exception: Cannot connect to host 10.1.9.133:443 ssl:True [SSLCertVerificationError: (1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1000)')] [11-13 15:30:44.330] chat.py (114) - [ERROR] : 对话(0)请求失败: N8nAPIError n8n webhook call exception: Cannot connect to host 10.1.9.133:443 ssl:True [SSLCertVerificationError: (1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1000)')]
Enabled plugins
[11-13 15:30:44.330] n8nsvapi.py (154) - [ERROR] : n8n webhook call exception: Cannot connect to host 10.1.9.133:443 ssl:True [SSLCertVerificationError: (1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1000)')] [11-13 15:30:44.330] chat.py (114) - [ERROR] : 对话(0)请求失败: N8nAPIError n8n webhook call exception: Cannot connect to host 10.1.9.133:443 ssl:True [SSLCertVerificationError: (1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1000)')]
这个报错说明 LangBot 在调用 n8n webhook 时,无法验证目标服务器(10.1.9.133:443)的 SSL 证书,通常是因为服务器证书是自签名或未被系统信任的 CA 签发。
目前 n8n webhook 的实现(n8nsvapi.py)默认使用 aiohttp 的系统 CA 验证,没有提供关闭验证或自定义 CA 的配置项,所以只要证书链不被系统信任就会报错来源。
解决思路如下:
-
推荐做法:让 n8n 服务器使用受信任的证书(比如 Let's Encrypt 或公司根证书已导入系统 CA)。
-
代码层面 workaround:可以在 n8nsvapi.py 里为 aiohttp.ClientSession.post 增加 ssl 参数,传入自定义的 SSL context。例如用 certifi 作为 CA 根证书(如果你已经把公司 CA 合并进 certifi 的 ca-bundle):
import ssl import certifi ssl_context = ssl.create_default_context(cafile=certifi.where()) # ... async with aiohttp.ClientSession() as session: async with session.post( self.webhook_url, json=payload, headers=headers, auth=auth, timeout=self.timeout, ssl=ssl_context ) as response: # ...这样可以让 Python 明确使用 certifi 的 CA 列表进行验证,适合大部分自签名或私有 CA 场景。
-
极端不安全做法(不推荐,仅用于测试):完全关闭 SSL 验证(生产环境千万不要用!):
ssl_context = ssl.create_default_context() ssl_context.check_hostname = False ssl_context.verify_mode = ssl.CERT_NONE然后同样传给 aiohttp 的 ssl 参数。
注意:如果你在 Docker 容器里已经导入了私有 CA,但 Python 依然报错,说明 Python/aiohttp 默认不会自动用系统 CA,需要用如上 certifi 方式显式指定 CA 路径来源。
建议优先让 n8n 服务器用受信任证书,或者把你的 CA 合并进 certifi,然后用上述代码 patch n8nsvapi.py。如果需要详细 patch 步骤可以补充说明。
To reply, just mention @dosu.
How did I do? Good | Irrelevant | Incorrect | Verbose | Hallucination | Report 🐛 | Other
这个地址不对,你需要确认一下你的n8n实例是否有签ssl证书,没有签的话,请使用http://