You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell连接自签名证书REST API遇连接强制关闭错误求助

解决自签名证书REST API调用时连接被强制关闭的问题

我帮你分析下这个问题——你已经跳过了自签名证书的验证,但还是碰到连接被远程主机强制关闭的错误,这大概率是TLS版本不兼容导致的,毕竟很多旧设备只支持TLS 1.0或1.1,而新版PowerShell和.NET框架默认已经禁用了这些老旧的加密协议。试试下面这些解决步骤:

1. 强制指定兼容的TLS版本

在发起API请求前,先设置支持的TLS版本,覆盖系统默认配置:

# 启用TLS 1.0、1.1、1.2,可根据设备实际支持情况调整
[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::Tls12 -bor [System.Net.SecurityProtocolType]::Tls11 -bor [System.Net.SecurityProtocolType]::Tls

把这段代码加到你的原有脚本里,完整示例如下:

# 跳过证书验证
[System.Net.ServicePointManager]::ServerCertificateValidationCallback = { $true }
# 指定兼容的TLS版本
[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::Tls12 -bor [System.Net.SecurityProtocolType]::Tls11 -bor [System.Net.SecurityProtocolType]::Tls

$uri = 'https://hostname/api/config'
$headers = @{"Authorization"="token apitokengoeshere"}
try {
    Invoke-RestMethod -Uri $uri -Headers $headers
} catch {
    $_.Exception | Format-List -Force
}

2. 确认目标设备支持的TLS版本

如果上面的代码还是无效,你可以先排查目标设备到底支持哪些TLS版本。如果本地安装了OpenSSL,可以用以下命令测试:

# 测试TLS 1.0
openssl s_client -connect hostname:443 -tls1
# 测试TLS 1.1
openssl s_client -connect hostname:443 -tls1_1
# 测试TLS 1.2
openssl s_client -connect hostname:443 -tls1_2

根据测试结果,只保留设备实际支持的TLS版本到SecurityProtocol配置中。

3. 其他排查方向

  • 检查目标设备的防火墙/安全组是否允许你的客户端IP访问443端口;
  • 确认设备上的API服务是否正常运行,查看设备日志是否有连接被拒绝的具体原因;
  • 如果你使用的是PowerShell 7及以上版本,可以直接用-SkipCertificateCheck参数替代证书验证回调,这个参数更简洁可靠:
Invoke-RestMethod -Uri $uri -Headers $headers -SkipCertificateCheck

内容的提问来源于stack exchange,提问作者wbbigdave

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:15:30