1. 安装 OpenClaw 时 iwr 报“未能创建 SSL/TLS 安全通道”到底卡在哪
你在 Windows PowerShell 里敲下iwr -useb https://openclaw.ai/install.ps1 | iex,本来想着一路回车把 OpenClaw 装好,结果终端直接甩回来一句:
iwr : 请求被中止: 未能创建 SSL/TLS 安全通道。这句话是 .NET 的HttpWebRequest抛出来的,不是 OpenClaw 自己的报错。它说明一件事:PowerShell 在跟目标服务器握手时,双方没能谈拢用哪个 TLS 版本,或者证书链没验过去,连接在加密层就被掐断了。iwr是Invoke-WebRequest的别名,它底层走的是 .NET 的ServicePointManager,而 Windows PowerShell 5.1 默认跑在 .NET Framework 4.x 上,这个老框架的默认安全协议往往只开了 SSL3 和 TLS 1.0。现在绝大多数站点早就把 TLS 1.0 关了,只留 TLS 1.2 / 1.3,于是协商直接失败。
这个报错特别容易让人误判。有人以为是网络不通,去 ping 域名;有人以为是 OpenClaw 的安装脚本坏了,反复重下;还有人以为是杀毒软件拦了。其实都不是。你可以在同一台机器上用浏览器打开https://openclaw.ai/install.ps1,浏览器能正常显示脚本内容,因为 Chrome / Edge 自带现代 TLS 栈,跟 PowerShell 用的完全不是一套。这就解释了为什么“浏览器能开、命令行不行”。
我试过在一台刚装好的 Windows Server 上复现,现象一模一样:浏览器访问正常,iwr必挂。把 TLS 版本显式打开后,同一条命令立刻跑通。所以排查方向应该锁定在三个点:TLS 协议版本协商、证书链信任、以及 PowerShell 会话的 .NET 运行时配置。这篇记录就按这三条线走,顺带把安装脚本里可能触发的模型接口请求也一起理顺,让 OpenClaw 的安装流程能真正走完。
适合谁看:在 Windows 上用 PowerShell 装 OpenClaw、装其他 CLI 工具时遇到同类 SSL/TLS 报错的人;以及想把安装脚本里的模型调用指向一个稳定入口、避免再被证书问题绊住的人。下面所有命令都可以直接复制,我会标清楚哪条是临时生效、哪条是永久生效。
2. 动手前先把 TaoToken 的入口和 Key 准备好
OpenClaw 这类工具在安装和首次运行阶段,经常会去拉取模型列表或做一次连通性探测。如果这一步的请求地址、密钥、模型 ID 没配好,你就算把 TLS 修好了,安装脚本跑到后面还是会因为 401 或连接失败中断。所以先把入口统一到 TaoToken,后面配置里直接引用,省得来回改。
TaoToken 在这里扮演的是一个统一的模型调用入口:你拿到一个 Base URL 和一个 API Key,就能在 OpenClaw、Cline、Codex 这类工具里调用多家模型,不用每个工具单独去对接不同厂商的地址和鉴权方式。对安装排障来说,好处是请求目标固定、证书链稳定,不会因为脚本里写死了某个不稳定域名而反复触发 TLS 问题。
你需要准备三样东西,我把它叫“三件套”,后面配置里会反复出现:
| 项目 | 值 | 说明 |
|---|---|---|
| Base URL | https://taotoken.net/api | 所有模型请求的统一入口,注意结尾不带斜杠 |
| API Key | 在控制台创建 | 形如sk-开头的一串字符,只显示一次,记得存好 |
| Model ID | 按需选择 | 例如对话类、编码类模型的具体标识,填错会报 model not found |
获取路径很直接:打开https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite创建密钥,复制保存;模型 ID 可以在https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite里对照文档确认。如果你只是想先验证通道能不能通,可以用https://taotoken.net/models?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite里的对话入口手动发一条消息,确认 Key 有效。
这里有个细节要注意:Base URL 用https://taotoken.net/api,不要自己加/v1或结尾斜杠,不同工具对路径拼接的处理不一样,多写一段就可能 404。Key 不要写进会提交到 Git 的文件里,本地测试可以用环境变量,配置类文件放用户目录下。
准备好这三件套之后,再回到 TLS 排障。因为后面验证阶段,我们会用一条指向 TaoToken 的请求来确认“通道建立成功”,这样既验证了 TLS 修复,也验证了模型入口可用,一举两得。
3. 可复制的 PowerShell 配置:TLS 版本、证书链与 OpenClaw 安装脚本
这一节是核心,所有片段都能直接粘贴。先解决 TLS 协商,再处理证书链,最后把 OpenClaw 安装脚本跑起来,并把模型入口指向 TaoToken。
3.1 临时启用 TLS 1.2 / 1.3(当前会话生效)
在报错的同一个 PowerShell 窗口里执行:
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 -bor [Net.SecurityProtocolType]::Tls13如果你用的是 Windows PowerShell 5.1,Tls13这个枚举值可能不存在,会报“找不到类型”。那就退回多版本兼容写法:
[Net.ServicePointManager]::SecurityProtocol = "Tls, Tls11, Tls12"执行完再跑一次安装命令:
iwr -useb https://openclaw.ai/install.ps1 | iex如果这次不再报 SSL/TLS 通道错误,说明就是协议版本没开。但临时设置只对当前窗口有效,关掉终端就失效,所以还需要永久配置。
3.2 永久写入注册表,让 .NET 默认启用强 TLS
Windows PowerShell 5.1 读的是 .NET Framework 的 Schannel 配置。用管理员权限打开 PowerShell,执行下面两段,分别针对 32 位和 64 位运行时:
$paths = @( 'HKLM:\SOFTWARE\Microsoft\.NETFramework\v4.0.30319', 'HKLM:\SOFTWARE\WOW6432Node\Microsoft\.NETFramework\v4.0.30319' ) foreach ($p in $paths) { if (-not (Test-Path $p)) { New-Item -Path $p -Force | Out-Null } New-ItemProperty -Path $p -Name 'SchUseStrongCrypto' -Value 1 -PropertyType DWord -Force | Out-Null New-ItemProperty -Path $p -Name 'SystemDefaultTlsVersions' -Value 1 -PropertyType DWord -Force | Out-Null }改完注册表要重启 PowerShell 窗口才生效。这一步做完,新开的会话默认就会用系统支持的强 TLS,不用每次手动设SecurityProtocol。
3.3 证书链排查:确认不是中间证书缺失
如果 TLS 版本开了还是报同样的错,就要看证书链。用下面这条命令单独请求目标地址,把异常信息打全:
try { $r = Invoke-WebRequest -Uri 'https://openclaw.ai/install.ps1' -UseBasicParsing -MaximumRedirection 5 "状态码: $($r.StatusCode)" } catch { "异常类型: $($_.Exception.GetType().FullName)" "异常信息: $($_.Exception.Message)" if ($_.Exception.InnerException) { "内层异常: $($_.Exception.InnerException.Message)" } }如果内层异常提到RemoteCertificateChainErrors或TrustFailure,说明本机根证书库缺东西。可以手动触发一次根证书更新:
certutil -generateSSTFromWU roots.sst Import-Certificate -FilePath .\roots.sst -CertStoreLocation Cert:\LocalMachine\Root这条会从 Windows 更新拉取受信任根证书列表并导入。企业内网机器如果走了 TLS 检查设备,证书链会被替换,这种情况需要把内网 CA 根证书导入Cert:\LocalMachine\Root,否则任何iwr都会失败。
3.4 把 OpenClaw 的模型入口指向 TaoToken
安装脚本跑通后,OpenClaw 首次启动会读配置文件。不同版本路径略有差异,常见的是用户目录下的.openclaw或config目录。下面给一份 JSON 配置片段,字段名按常见约定写,你对照自己版本的文档微调:
{ "provider": { "baseUrl": "https://taotoken.net/api", "apiKey": "sk-你的密钥", "model": "你的模型ID", "timeout": 60000 }, "install": { "scriptUrl": "https://openclaw.ai/install.ps1", "verifyTls": true } }如果你用的是 TOML 风格配置,等价写法:
[provider] baseUrl = "https://taotoken.net/api" apiKey = "sk-你的密钥" model = "你的模型ID" timeout = 60000注意baseUrl结尾不要加斜杠,apiKey和model必须和你在控制台、文档里看到的一致。配置写完后,OpenClaw 的模型请求就会走 TaoToken,不再依赖脚本里可能写死的旧地址。
4. 验证请求:确认 TLS 通道建立成功、安装流程继续
配置改完不能只看“没报错”,要主动验证。下面分三步,从 TLS 握手到模型接口,逐层确认。
第一步,验证 TLS 握手本身。用curl.exe(Windows 10 1803 之后自带)看握手细节:
curl.exe -v https://openclaw.ai/install.ps1 -o NUL输出里找这几行:SSL connection using TLSv1.2或TLSv1.3,以及subject:和issuer:证书信息。如果显示SSL certificate verify ok,说明证书链没问题。这一步能过,iwr基本就不会再报通道错误。
第二步,验证 OpenClaw 安装脚本能完整下载并执行。先只下载不执行,确认内容完整:
iwr -useb https://openclaw.ai/install.ps1 -OutFile .\install.ps1 Get-Content .\install.ps1 -TotalCount 20看到脚本头部内容正常输出,说明下载链路通了。再执行:
powershell -ExecutionPolicy Bypass -File .\install.ps1安装过程中如果出现模型探测请求,观察是否返回 200。如果卡在鉴权,回到第 2 节检查三件套。
第三步,直接验证 TaoToken 入口可用。用一条最小请求确认 Key 和地址正确:
$headers = @{ 'Authorization' = 'Bearer sk-你的密钥' 'Content-Type' = 'application/json' } $body = @{ model = '你的模型ID' messages = @(@{ role = 'user'; content = 'ping' }) } | ConvertTo-Json -Depth 5 try { $resp = Invoke-RestMethod -Uri 'https://taotoken.net/api/chat/completions' -Method Post -Headers $headers -Body $body "返回内容: $($resp.choices[0].message.content)" } catch { "状态: $($_.Exception.Response.StatusCode.value__)" "信息: $($_.Exception.Message)" }返回里有choices字段和内容,说明模型入口通了。如果返回 401,是 Key 问题;返回 404,多半是路径或模型 ID 写错;返回reading choices之类的解析错误,通常是响应体不是预期 JSON,检查 Base URL 是否被工具自动拼了多余路径。
三步都过,就可以确认:TLS 通道建立成功,OpenClaw 安装流程能继续,模型调用也指向了稳定入口。
5. 本篇常见报错对照排查:401、local proxy failed、reading choices、OAuth
排障最怕报错信息模糊。下面把这类安装场景里高频出现的几条列出来,对照着看能省很多时间。
401 Unauthorized:Key 无效、过期,或者请求头没带上。检查Authorization是不是Bearer开头,中间有空格;确认 Key 没有多余换行;确认用的是当前控制台里有效的 Key。如果刚在https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite创建,注意复制完整。
local proxy failed或proxy connect类错误:本机设置了系统代理,但代理进程没起来或端口不对。PowerShell 的iwr会读系统代理设置。用netsh winhttp show proxy看当前代理,必要时netsh winhttp reset proxy清掉,再重试。注意这里说的是本机网络配置层面的排查,不涉及任何绕过网络管理的手段。
reading choices/cannot read property choices:请求发出去了,但返回体不是预期的 JSON 结构。常见原因是 Base URL 被工具自动补了/v1,或者模型 ID 填成了展示名而不是调用 ID。把baseUrl固定为https://taotoken.net/api,模型 ID 对照文档核对。
OAuth相关报错:某些工具首次登录会走 OAuth 流程,如果浏览器回调地址被占用或超时,会失败。检查默认浏览器能正常打开回调页,端口没被其他程序占用。如果工具支持 API Key 模式,优先用 Key,少一层交互就少一个故障点。
未能创建 SSL/TLS 安全通道反复出现:回到第 3 节,确认注册表两项都写了、PowerShell 窗口重启过、证书链没有 TrustFailure。企业机器重点查内网 CA 根证书是否导入。
The request was aborted: Could not create SSL/TLS secure channel英文版:和中文报错同源,处理方式完全一样。
Invoke-WebRequest : 基础连接已经关闭:多半也是 TLS 版本问题,按 3.1 临时开启后重试,再按 3.2 永久修复。
排查顺序建议固定为:先看 TLS 版本,再看证书链,再看代理,最后看鉴权和模型 ID。这个顺序从底层往上走,能避免在应用层瞎猜。
6. 把安装入口固定下来,后续少踩坑
TLS 这类问题修一次就该固化,不要每次开新终端都手动设。注册表那两项写完,新会话默认强加密,iwr、Invoke-RestMethod、curl.exe都会受益。OpenClaw 的配置里把baseUrl指向https://taotoken.net/api,Key 和模型 ID 用文档里确认过的值,安装脚本后续的模型探测就不会再因为地址漂移而失败。
如果你后面要长期跑编码类任务或 Agent 流程,可以了解下 Coding Plan 这类按周期计费的方式,入口在https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite;只是临时验证模型通不通,用模型对话页更轻,地址是https://taotoken.net/models?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite。接入细节和字段说明统一看文档https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite,Key 管理在https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite。
最后留一个我踩过的坑:改完注册表后没重启终端,直接重跑安装,还是报同样的错,白白多排查了半小时。记住,注册表改动只对新开的 PowerShell 会话生效。