Daemon HTTPS 与证书
配置 PEM 证书、浏览器安全上下文及渠道 worker 的回连信任。
This page has not been translated into English yet. The original Chinese version is shown below.
默认 daemon 使用 HTTP。手机通过局域网 IP 访问时,纯 HTTP 不能提供 getUserMedia 等浏览器安全上下文能力;需要可信 HTTPS 才能使用相关语音入口。
证书与启动
准备已有的 PEM 证书和私钥,并确保使用设备信任其签发机构。示例路径必须换成实际证书:
qwen serve --hostname 0.0.0.0 \
--tls-cert /absolute/path/server.pem \
--tls-key /absolute/path/server-key.pem \
--allow-origin https://192.168.1.100:4170tls-cert 与 tls-key 必须成对,缺一个会拒绝启动。TLS 只加密传输,不取代 bearer:非 loopback 仍需配置或启动时生成的 token。daemon 不自动生成证书,也不提供 ACME/Let's Encrypt 签发。
证书 SAN 应涵盖实际浏览器地址。使用 --open 时,本机打开地址可能改为 127.0.0.1,因此只含 LAN IP 的证书会产生名称不匹配。
渠道 worker 也需要信任
渠道 worker 通过 HTTPS 回连 daemon。自签证书或包含根的完整链可由 daemon 注入 worker 的 NODE_EXTRA_CA_CERTS;由本地 CA 签发的叶证书本身不足以建立信任,需要在 daemon 启动环境提供 CA 根。
官方用 mkcert 时的环境配置为:
export NODE_EXTRA_CA_CERTS="$(mkcert -CAROOT)/rootCA.pem"该命令要求已经安装并配置 mkcert。operator 提供的 CA 与 daemon 证书合并,不被覆盖;缺少 CA 时可能表现为 daemon 正常启动,但所有渠道 worker 因 UNABLE_TO_VERIFY_LEAF_SIGNATURE 反复失败。检查启动日志的信任诊断。
IPv6 与证书轮换
:: 或 [::] 通配监听为双栈;worker 使用主机实际拥有的 loopback,存在 ::1 时用它,否则使用 127.0.0.1。证书同时包含两个 loopback,可避免环境切换后的名称不匹配。0.0.0.0 的 worker 回连仍需 127.0.0.1。
空 hostname 会在绑定前报错,不会默默解释成通配地址。原地替换证书文件后必须重启 daemon:监听器继续使用启动时读到的字节,新 worker 却可能读到新证书,导致二者信任不一致。
反向代理的 TLS、Host 和 Origin 行为还需按远程访问处理。官方早期“local-only”说明不应被解读为这些具体 TLS 参数不存在,也不能反过来当作所有公网生产部署已获保证。