Windows Hub 连接 OpenClaw TLS Gateway 报 Transport Error 排查与修复
问题现象
Windows Hub 通过 wss:// 连接局域网内 OpenClaw Gateway 时,报 Transport error,无法建立连接。
环境
- Debian 服务器:192.168.0.9,运行 OpenClaw Gateway,端口 18789,TLS 已开启(自签证书)
- Windows PC:Windows 10 LTSC 2021(21H2),安装 OpenClaw Windows Hub
- 网络:同一局域网(192.168.0.x)
根本原因
排查发现是 TLS 协议版本不兼容:
- OpenClaw Gateway 硬编码
minVersion: "TLSv1.3",只接受 TLS 1.3 连接 - Windows 10 19044(21H2)的 schannel 对 TLS 1.3 支持不完整,即使手动启用注册表和 Internet 选项中的 TLS 1.3(实验),curl 测试仍报
SEC_E_ALGORITHM_MISMATCH - Windows 10 LTSC 2021 无法安装 TLS 1.3,只能降级服务端 TLS 版本至 1.2
排查过程
| 步骤 | 操作 | 结果 |
|---|---|---|
| 1 | 导入自签证书到 Windows 受信任根证书颁发机构 | 证书信任问题解决,但连接仍失败 |
| 2 | 重新生成包含 IP SAN 的证书(IP.1 = 192.168.0.9) | 证书验证通过,但连接仍失败 |
| 3 | 用 curl.exe -k -v https://192.168.0.9:18789 测试 | 报 SEC_E_ILLEGAL_MESSAGE,握手失败 |
| 4 | Debian 上用 openssl s_client -tls1_2 测试 | 报 tlsv1 alert protocol version,确认网关只接受 TLS 1.3 |
| 5 | 在 OpenClaw 源码中搜索 | 找到 gateway-D7pGc7Ge.js 中 minVersion: "TLSv1.3" |
解决方案
修改 OpenClaw 的 TLS 最低版本为 1.2:
# 1. 备份原文件
cp /root/.nvm/versions/node/v24.19.0/lib/node_modules/openclaw/dist/gateway-D7pGc7Ge.js /root/.nvm/versions/node/v24.19.0/lib/node_modules/openclaw/dist/gateway-D7pGc7Ge.js.bak
# 2. 修改 minVersion
sed -i 's/minVersion: "TLSv1.3"/minVersion: "TLSv1.2"/' /root/.nvm/versions/node/v24.19.0/lib/node_modules/openclaw/dist/gateway-D7pGc7Ge.js
# 3. 验证修改
grep -n 'minVersion' /root/.nvm/versions/node/v24.19.0/lib/node_modules/openclaw/dist/gateway-D7pGc7Ge.js
# 4. 重启 OpenClaw
pkill -f openclaw
注意事项
- 升级后需重新修改:OpenClaw 升级后会覆盖修改,升级后需重新执行上述 sed 命令
- 证书需包含 IP SAN:否则 Windows 会因证书与 IP 不匹配而拒绝连接。生成证书时需在配置中包含:
[alt_names]
IP.1 = 192.168.0.9
- 证书导入位置:Windows 的「受信任的根证书颁发机构」(Cert:\LocalMachine\Root),不是当前用户
- 配置文件证书路径:注意 OpenClaw 配置(openclaw.json)中指定的实际证书路径,本文案例中是
/root/.openclaw/tls/server.crt,与证书生成脚本输出路径可能不一致
涉及的证书路径(本文案例)
| 路径 | 用途 |
|---|---|
| /root/.openclaw/tls/server.crt | OpenClaw 实际加载的证书(配置中指定) |
| /root/.openclaw/tls/server.key | OpenClaw 实际加载的私钥 |
| /root/.openclaw/gateway/tls/gateway-cert.pem | 另一处证书位置(非实际使用) |
验证命令
# Debian 上验证 TLS 1.2 可连接
openssl s_client -connect 192.168.0.9:18789 -tls1_2
# Windows 上验证 TLS 1.2 可连接
curl.exe --tlsv1.2 -k -v https://192.168.0.9:18789
如果 curl 返回 HTTP 200 和 HTML 内容,说明 TLS 握手成功,Windows Hub 即可正常连接。
