OpenClaw 云服务器 SSL 部署指南:HTTPS 安全上下文与四种证书接入方案 人工智能AI Agent即时通讯后端本地部署语音【免费下载链接】openclaw-cn中文社区版OpenClaw同原版保持定期更新已内置钉钉、企业微信、飞书、QQ、微信以及国内网络环境优化。你的专属个人AI助手。支持所有操作系统和平台。项目地址https://gitcode.com/gh_mirrors/op/openclaw-cn点击查看免费下载导读当您把 OpenClaw 部署到云服务器并通过公网浏览器访问控制界面时会看到disconnected (1008): control ui requires HTTPS or localhost (secure context)错误。本文以官方部署文档 docs/guides/ssl-deployment.md 为主体结合仓库内配置与认证源码系统讲解该错误的成因浏览器安全上下文约束并给出四种经过验证的解决方案Nginx Lets Encrypt 反向代理、OpenClaw 内置 TLS、Tailscale 组网、以及仅限开发测试的不安全模式。读完本文您将掌握 OpenClaw 网关gateway配置段中bind、trustedProxies、tls、controlUi、auth等关键参数的完整语义与生产级配置方法。一、问题背景为什么控制界面强制要求 HTTPS 或 localhostOpenClaw 的 Web 控制界面Control UI依赖 Web Crypto API 完成设备身份验证而浏览器只对**安全上下文Secure Context**开放这一 API。所谓安全上下文浏览器仅在以下两类访问方式下提供通过localhost或127.0.0.1访问通过 HTTPS 访问。因此直接使用http://服务器公网IP:18789访问时浏览器会拒绝建立 WebSocket 连接并抛出disconnected (1008)错误。注意这里同时存在两条约束一是传输层需要安全上下文二是网关默认仅绑定本地回环地址见下文bind参数。这一安全约束在源码中同样有体现。网关默认端口为18789见 src/gateway/server.impl.ts而控制界面默认随网关一起启用。仓库 src/config/zod-schema.ts 中controlUi配置对象包含enabled、basePath、allowInsecureAuth、dangerouslyDisableDeviceAuth四个字段其中allowInsecureAuth正是文档方案四用于关闭安全检查的开关dangerouslyDisableDeviceAuth则进一步允许完全关闭设备认证仅限极端调试场景。二、方案一Nginx 反向代理 Lets Encrypt生产环境推荐这是最推荐的生产环境方案用 Nginx 终结 TLS把流量转发给绑定在本地回环地址的 OpenClaw 网关证书则使用 Lets Encrypt 免费签发并自动续期。前提条件一个指向服务器 IP 的域名例如your-domain.com服务器防火墙/安全组开放 80 与 443 端口80 用于 Lets Encrypt 的 HTTP-01 挑战443 用于正式 HTTPS 流量。步骤 1安装 Nginx 与 CertbotUbuntu/Debiansudo apt update sudo apt install -y nginx certbot python3-certbot-nginxCentOS/RHELsudo yum install -y epel-release sudo yum install -y nginx certbot python3-certbot-nginx sudo systemctl enable nginx sudo systemctl start nginx步骤 2配置 Nginx 反向代理创建站点配置文件sudo nano /etc/nginx/sites-available/openclaw写入以下内容将your-domain.com替换为您的域名server { listen 80; server_name your-domain.com; location / { proxy_pass http://127.0.0.1:18789; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection upgrade; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_read_timeout 86400; } }为什么必须保留 WebSocket 相关头部OpenClaw 控制界面与网关之间的实时通信基于 WebSocket。proxy_http_version 1.1、Upgrade与Connection upgrade三个设置缺一不可否则浏览器侧会出现 WebSocket 握手失败详见下文 FAQ。proxy_read_timeout 86400用于避免长时间空闲连接被 Nginx 掐断。启用配置并重载sudo ln -s /etc/nginx/sites-available/openclaw /etc/nginx/sites-enabled/ sudo nginx -t sudo systemctl reload nginx步骤 3申请 Lets Encrypt 证书sudo certbot --nginx -d your-domain.com按提示操作Certbot 会自动改写 Nginx 配置、启用 HTTPS 并注册续期定时任务。步骤 4配置 Openclaw编辑配置文件Linux 下默认路径为~/.openclaw/openclaw.json{ gateway: { // 绑定到本地回环由 Nginx 代理对外暴露 bind: loopback, port: 18789, // 配置信任的代理地址保证 X-Forwarded-For 等头不被伪造 trustedProxies: [127.0.0.1], // 启用认证推荐 auth: { mode: token, token: your-secure-token-here } } }重启网关使配置生效openclaw-cn gateway步骤 5访问控制界面浏览器打开https://your-domain.com在登录页输入上一步配置的 token 即可。源码层面的为什么trustedProxies 与 Client IP 解析trustedProxies并非可有可无。在 src/gateway/auth.ts 的isLocalDirectRequest实现中网关会解析请求的真实客户端 IP优先使用x-forwarded-for/x-real-ip并调用resolveGatewayClientIp做地址可信校验当请求带有转发头x-forwarded-for、x-real-ip、x-forwarded-host时要求连接来源必须是受信任的代理地址否则不再视为本地直连。如果未配置trustedProxies来自 Nginx 的转发请求会被判定为不可信来源可能影响控制界面的认证判定与审计日志中的客户端 IP 记录。因此生产环境务必把反向代理所在地址如127.0.0.1列入信任列表。该字段在 src/config/zod-schema.ts 中被定义为字符串数组trustedProxies: z.array(z.string()).optional()。三、方案二使用 OpenClaw 内置 TLS如果不想额外维护 NginxOpenClaw 网关本身支持直接启用 TLS把证书配置写进gateway.tls即可。配置 Schema 位于 src/config/zod-schema.ts包含enabled、autoGenerate、certPath、keyPath、caPath五个字段。3.1 使用自签名证书开发/测试{ gateway: { bind: lan, // 或 0.0.0.0 port: 18789, tls: { enabled: true, autoGenerate: true // 自动生成自签名证书 }, auth: { mode: token, token: your-secure-token-here } } }注意自签名证书不在浏览器信任链内首次访问会显示安全警告需要手动信任Chrome 可在高级 → 继续前往中临时放行Firefox 需导入证书。源码细节——证书是怎么自动生成的内置 TLS 的完整实现位于 src/infra/tls/gateway.ts。当tls.enabled true且autoGenerate未显式设为false时网关会调用本机openssl生成自签名证书关键参数如下算法RSA 2048 SHA-256有效期3650 天主题/CNclawdbot-gateway输出文件默认路径为配置目录下的gateway/tls/gateway-cert.pem与gateway/tls/gateway-key.pem对应CONFIG_DIR即~/.openclaw生成后会自动执行chmod 0600收紧私钥权限。也就是说即使您不指定certPath/keyPath只要开启autoGenerate网关也会在配置目录下自动落盘证书无需手工openssl req。3.2 使用正式证书从 CA 获取证书如 Lets Encrypt 签发的fullchain.pem与privkey.pem后指定路径即可{ gateway: { bind: lan, port: 18789, tls: { enabled: true, certPath: /path/to/fullchain.pem, keyPath: /path/to/privkey.pem }, auth: { mode: token, token: your-secure-token-here } } }从 src/infra/tls/gateway.ts 的实现看网关会先检查证书/私钥文件是否存在certPath、keyPath支持~展开的相对路径若两文件均缺失且允许自动生成则先生成自签名证书若文件不完整则返回enabled: false并附错误信息。此外src/gateway/server.impl.ts 会在启动阶段调用loadGatewayTlsRuntime并校验结果——若配置了tls.enabled: true但加载失败网关会直接抛出启动错误避免以为启用了 HTTPS 实际没有的隐患。使用正式证书时建议同时关注caPath字段可选用于指定 CA 证书链例如某些内部 CA 签发的证书场景。四、方案三使用 Tailscale 组网简单易用如果您已用 Tailscale 把服务器与本地设备组成虚拟局域网这是最省心的方案无需申请证书、无需反向代理由 Tailscale 自动签发 HTTPS 证书。步骤 1安装并登录 Tailscale# Ubuntu/Debian curl -fsSL https://tailscale.com/install.sh | sh sudo tailscale up步骤 2配置 Openclaw{ gateway: { bind: loopback, tailscale: { mode: serve // 或 funnel 用于公网访问 }, auth: { allowTailscale: true // 允许 Tailscale 身份认证 } } }步骤 3访问通过 Tailscale MagicDNS 地址访问https://your-machine.tailnet.ts.net/源码层面的为什么serve 与 funnel 的区别tailscale.mode在 src/config/zod-schema.ts 中被限定为三个字面量off、serve、funnel。其运行时行为见 src/gateway/server-tailscale.tsserve仅向 Tailscale 网络内部暴露 HTTPS 服务日志会输出https://hostuiPathWebSocket 对应wss://只有组网内的设备可访问最安全funnel将服务通过 Tailscale Funnel 暴露到公网网关退出时resetOnExit相关逻辑会执行 Tailscale serve 清理避免残留代理规则。认证侧同样有联动在 src/gateway/auth.ts 中auth.allowTailscale的默认行为是——当tailscale.mode serve且认证模式不是password时默认放行 Tailscale 身份认证。配合 src/gateway/auth.ts 的getTailscaleUser网关会读取 Tailscale 注入的tailscale-user-login、tailscale-user-name、tailscale-user-profile-pic头并做 whois 反向校验确保登录身份与 Tailscale 身份一致。此外isLocalDirectRequestsrc/gateway/auth.ts还把*.ts.net域名视为本地访问因此通过 Tailscale 域名访问天然满足localhost 或 HTTPS的安全上下文要求。五、方案四仅开发/测试用 —— 禁用安全检查⚠️ 警告此方案仅用于开发测试切勿在生产环境使用它会让控制界面在明文 HTTP 下接受 token 认证任何能访问到该端口的人都可能嗅探凭据。如果只是临时在局域网内测试可以显式关闭控制界面的安全检查{ gateway: { bind: lan, port: 18789, controlUi: { // 允许 HTTP 下使用 token 认证 allowInsecureAuth: true }, auth: { mode: token, token: your-token-here } } }然后通过http://your-server-ip:18789访问。补充说明controlUi配置对象在 src/config/zod-schema.ts 中定义除allowInsecureAuth外还有两个字段值得了解enabled是否启用控制界面默认随网关启用basePath控制界面的基础路径用于与反向代理路径前缀配合dangerouslyDisableDeviceAuth完全关闭设备级认证名字已提示危险生产环境禁止使用。auth.mode的合法取值同样由 Schema 约束src/config/zod-schema.tstoken或password。在 src/gateway/auth.ts 的方法枚举中还包含none、tailscale、device-token分别对应无认证、Tailscale 身份认证与设备 token 认证。六、常见问题FAQQ: 为什么必须使用 HTTPSOpenClaw 控制界面使用 Web Crypto API 进行设备身份验证这些 API 只在安全上下文Secure Context下可用。浏览器将localhost和 HTTPS 页面视为安全上下文。这是浏览器的硬性安全策略任何 Web 应用都无法绕过。Q: 可以使用 IP 地址而不是域名吗可以但需要满足以下条件之一使用自签名证书会有浏览器警告参见方案二使用方案四的不安全模式明文 HTTP allowInsecureAuth仅限开发测试。需要留意的是Lets Encrypt 不支持为纯 IP 地址签发受信任证书目前仅支持域名所以公网 IP 场景无法走方案一的免费受信证书路径。Q: Lets Encrypt 证书如何自动续期Certbot 安装时会自动注册 systemd timer 或 cron 定时任务。您可以用以下命令验证续期流程是否正常sudo certbot renew --dry-runLets Encrypt 证书有效期为 90 天务必确认自动续期任务正常运行否则证书过期后浏览器会直接拒绝连接。Q: 反向代理后 WebSocket 连接失败请检查 Nginx 配置是否包含 WebSocket 必需的头部设置proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection upgrade;这三行缺一不可同时确认proxy_pass指向的地址正确默认网关端口为 18789且proxy_read_timeout足够长文档示例为 86400 秒。Q: 如何配置多个域名在 Nginx 配置中为同一站点添加多个server_name然后一次性为所有域名申请证书sudo certbot --nginx -d domain1.com -d domain2.comCertbot 会为每个域名分别完成验证与证书签发。七、安全建议无论选择哪种方案都请遵循以下基线始终启用认证—— 设置gateway.auth.mode为token或password避免网关裸奔在公网使用强密码/Token—— 使用足够长、随机的 token 或高强度密码避免默认值或弱口令限制访问来源—— 如果可能用防火墙/安全组把网关端口18789限制在可信来源如反向代理服务器 IP 或 Tailscale 网段不要把 18789 直接暴露给公网定期更新证书—— Lets Encrypt 证书有效期 90 天确保自动续期正常sudo certbot renew --dry-run验证保护私钥—— 证书私钥权限应设为 600仅 root 可读。这一点 OpenClaw 内置 TLS 在自动生成证书后会自动执行chmod 0600见 src/infra/tls/gateway.ts手动管理证书时也请保持同样的权限纪律。相关文档网关配置 ——gateway配置段完整参考bind、port、trustedProxies、tls、controlUi 等全部字段网关认证 —— 认证方式详解token / password / Tailscale / device-tokenTailscale 集成 —— Tailscale serve/funnel 详细配置安全指南 —— 安全最佳实践与审计日志说明SSL 部署官方文档 —— 本文所依据的原始部署指南赞分享人工智能AI Agent即时通讯后端本地部署语音【免费下载链接】openclaw-cn中文社区版OpenClaw同原版保持定期更新已内置钉钉、企业微信、飞书、QQ、微信以及国内网络环境优化。你的专属个人AI助手。支持所有操作系统和平台。项目地址https://gitcode.com/gh_mirrors/op/openclaw-cn点击查看免费下载相关推荐TigerVNC云服务器部署Docker容器化与SSL证书自动配置完全指南还在为远程桌面连接的安全性和稳定性烦恼吗本文将为你提供TigerVNC在云服务器上的完整部署方案包含Docker容器化配置和SSL证书自动管理确保你的远程网络桌面应用通信Nextcloud Docker SSL证书配置HTTPS安全部署终极指南Nextcloud Docker SSL证书配置HTTPS安全部署终极指南 想要为你的Nextcloud Docker容器配置SSL证书实现安全的HT后端企业应用内容协同5分钟搞定云服务器SSLCertbot一键部署HTTPS证书指南5分钟搞定云服务器SSLCertbot一键部署HTTPS证书指南 你还在为云服务器配置HTTPS证书而头疼吗手动申请、上传、配置的过程是不是让你望而却步本网络安全CLI后端上一篇FreeTube崩溃恢复工具自动修复程序故障下一篇终极指南llama-cpp-python核心架构解析C与Python的完美桥梁创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考