一、错误现象
在 PowerShell 中运行 MAS 一键命令时,出现以下错误:
irm : 基础连接已经关闭: 未能为 SSL/TLS 安全通道建立信任关系。
所在位置 行:1 字符: 1
+ irm https://get.activated.win | iex
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-RestMethod],WebException
+ FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeRestMethodCommand或在英文系统中显示为:
Invoke-RestMethod: The underlying connection was closed: Could not establish trust relationship for the SSL/TLS secure channel.二、错误含义
这个错误说明 PowerShell 能够连接到服务器,但 SSL/TLS 证书验证失败,系统不信任服务器的安全证书。
与上一篇文章讲的"无法识别 URI 前缀"不同——那个是连 URL 都解析不了,这个是连接已建立但证书不受信任。
三、常见原因
| 原因 | 说明 |
|---|---|
| 系统时间不准确 | 证书有有效期,时间偏差过大会导致证书被认为已过期或尚未生效 |
| 系统根证书过期 | Windows 7 / 8 的根证书列表未更新,无法验证现代 CA 证书 |
| TLS 版本过低 | 服务器要求 TLS 1.2+,但系统默认只协商 TLS 1.0 |
| 缺少 SHA-2 签名支持 | 旧版 Windows 7 未安装 KB4474419 更新,不支持 SHA-2 签名的证书 |
| 代理/防火墙中间人 | 公司网络或杀毒软件做了 SSL 中间人劫持,替换了服务器证书 |
| 证书吊销检查失败 | 系统无法访问 CRL(证书吊销列表)分发点,例如在中国大陆无法访问 ocsp.digicert.com |
四、排查步骤
步骤 1:检查系统时间(最简单也最容易中招)
# 查看当前系统时间
Get-Date确保:
- 年、月、日完全正确
- 时区正确(中国为 UTC+8)
- 与手机或实际时间对比
修正方法:
# 同步网络时间
net stop w32time
w32tm /unregister
w32tm /register
net start w32time
w32tm /resync或者在图形界面:设置 → 时间和语言 → 日期和时间 → 开启 自动设置时间,然后点击 立即同步。
时间差超过 5 分钟就会导致证书验证失败。
步骤 2:测试 TLS 连接(确认是否能连接)
# 测试能否建立 TCP 连接
Test-NetConnection get.activated.win -Port 443如果 TcpTestSucceeded: True,说明网络连接没问题,问题出在证书验证环节。
步骤 3:查看服务器证书详情
# 使用 .NET 类获取服务器证书信息
[Net.ServicePointManager]::ServerCertificateValidationCallback = { $true }
$request = [Net.WebRequest]::Create("https://get.activated.win")
$request.GetResponse()
$cert = $request.ServicePoint.Certificate
$cert.Subject
$cert.Issuer
$cert.GetExpirationDateString()这会显示证书的签发者、主题和有效期,帮助判断是否是证书过期或被替换。
步骤 4:强制使用 TLS 1.2(最常见解决方案)
Windows 7 和 Windows 8 默认不启用 TLS 1.2,需要手动开启:
# 在运行 irn 命令之前执行
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
# 再运行 MAS
irm https://get.activated.win | iex如果可行,建议将这段写入 PowerShell 配置文件,永久生效:
# 添加到当前用户的 PowerShell 配置文件
$profilePath = "$HOME\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1"
$tlsLine = '[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 -bor [Net.SecurityProtocolType]::Tls13'
Add-Content -Path $profilePath -Value "`n$tlsLine" -ErrorAction SilentlyContinue步骤 5:忽略证书验证(临时绕过,不推荐长期使用)
# 忽略所有证书验证错误
[Net.ServicePointManager]::ServerCertificateValidationCallback = { $true }
# 再运行
irm https://get.activated.win | iex⚠️ 注意:这会禁用所有 HTTPS 证书验证,包括恶意网站。仅在临时排障时使用,用完后重置:
[Net.ServicePointManager]::ServerCertificateValidationCallback = $null
步骤 6:使用 WinHTTP 代替 .NET WebRequest
PowerShell 的 irm 默认使用 .NET 的 WebRequest,在旧系统上 SSL/TLS 支持有限。改用 WinHttpRequest COM 对象:
# 使用 WinHTTP COM 对象下载脚本
$http = New-Object -ComObject WinHttp.WinHttpRequest.5.1
$http.Open("GET", "https://get.activated.win", $false)
$http.SetTimeouts(30000, 30000, 30000, 30000)
$http.Send()
$scriptContent = $http.ResponseText
# 保存到临时文件再执行
$scriptContent | Out-File -FilePath "$env:TEMP\MAS.ps1" -Encoding utf8
& "$env:TEMP\MAS.ps1"WinHTTP 使用系统级 HTTP 堆栈,不受 .NET 的 TLS 版本限制。
步骤 7:安装 Windows 更新
Windows 7 SP1
必须安装以下更新才能支持 TLS 1.2 和 SHA-2 证书:
| KB 编号 | 说明 | 下载 |
|---|---|---|
| KB4474419 | SHA-2 签名支持(2019 年 9 月) | Microsoft Catalog |
| KB4490628 | 服务堆栈更新 | Microsoft Catalog |
| KB3140245 | 启用 TLS 1.2 的注册表更新 | Microsoft Catalog |
安装完成后,修改注册表启用 TLS 1.2:
# 启用 TLS 1.2 客户端
New-Item 'HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client' -Force | Out-Null
Set-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client' -Name 'DisabledByDefault' -Value 0
Set-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client' -Name 'Enabled' -Value 1
# 启用 TLS 1.2 服务器
New-Item 'HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server' -Force | Out-Null
Set-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server' -Name 'DisabledByDefault' -Value 0
Set-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server' -Name 'Enabled' -Value 1
# 重启生效(或重启 PowerShell)
Restart-ComputerWindows 8.1
# 安装 KB3140245 即可
# 或直接安装最新的月度安全质量更新步骤 8:更新根证书
即使系统时间正确、TLS 版本支持,也可能因为根证书列表过旧导致无法验证:
# 手动更新根证书
certutil -generateSSTFromWU roots.sst
certutil -addstore Root roots.sst
del roots.sstWindows 7 建议安装 KB2813430(根证书更新)。
也可以下载微软的根证书更新包:
步骤 9:排除代理/防火墙中间人
如果是在公司网络、校园网或开启了 SSL 扫描的杀毒软件环境下,服务器证书可能被中间人替换。
检查方法:
# 通过浏览器访问
# 在浏览器打开 https://get.activated.win
# 点击地址栏的锁图标,查看证书颁发者如果证书颁发者是内部 CA(如 Company-Proxy-CA)而非公开 CA,说明中间人劫持了 SSL 连接。
解决方法:
- 临时退出 360、腾讯电脑管家、火绒等杀毒软件
- 关闭 SSL 扫描功能(一般在杀毒软件的"网络安全"设置中)
- 如果是公司网络,可以使用手机热点绕过
步骤 10:使用 PowerShell 7(终极方案)
PowerShell 7 基于 .NET Core,内置了更新的 TLS 和证书支持,不存在旧系统的兼容问题:
# 安装 PowerShell 7
winget install --id Microsoft.Powershell --source winget
# 或手动下载安装
# https://github.com/PowerShell/PowerShell/releases安装后打开 PowerShell 7(pwsh) 再运行:
pwsh
irm https://get.activated.win | iexPowerShell 7 默认支持 TLS 1.2 和 1.3,证书验证也更完善。
五、快速排查流程
┌─────────────────────────────┐
│ 出现 SSL/TLS 信任错误 │
└──────────┬──────────────────┘
▼
┌─────────────────────────────┐
│ 检查系统时间是否正确? │
├──────────┬──────────────────┤
│ 否 │ 是 │
│ 同步时间 │ ▼ │
└──────────┘ ┌────────────────┐
│ 强制 TLS 1.2 │
├──────┬─────────┤
│ 可行 │ 不可行 │
│ 完成 ├─────────┤
│ │ 检查证书│
│ │ 详情 │
│ ├─────────┤
│ │ 检查否 │
│ │ 为 MS │
│ │ 更新 │
│ ├─────────┤
│ │ 升级 │
│ │ PS 7 │
│ ├─────────┤
│ │ 本地下载│
│ │ 保底 │
└──────┴─────────┘六、保底方案:完全绕过 irm
如果以上所有方法都不行,直接用浏览器或 curl 下载脚本:
# 使用 .NET WebClient(不受 PowerShell 版本限制)
$wc = New-Object System.Net.WebClient
$wc.DownloadFile("https://get.activated.win", "$env:TEMP\MAS.ps1")
& "$env:TEMP\MAS.ps1"或者使用 bitsadmin(Windows 自带后台智能传输服务):
bitsadmin /transfer masdownload /download /priority high https://get.activated.win %TEMP%\MAS.ps1
& "$env:TEMP\MAS.ps1"七、新旧错误对比
| 错误 | 含义 | 解决方向 |
|---|---|---|
| 无法识别该 URI 前缀 | URL 解析失败 | 手动输入命令,清理空格 |
| SSL/TLS 安全通道信任关系 | 证书验证失败 | 时间、TLS 版本、根证书、更新 |
八、总结
"SSL/TLS 安全通道无法建立信任关系"的解决顺序:
- ⏰ 先看时间(80% 是这个问题)
- 🔒 强制 TLS 1.2(Windows 7/8 的标配问题)
- 📦 安装系统更新(KB4474419 + KB3140245)
- 🔄 升级 PowerShell 7(一劳永逸)
- 📥 本地下载(最终保底)