我在Windows 2016标准服务器上运行的PowerShell 5.1脚本有问题,由于默认设置,该脚本失败
SecurityProtocol
使用
HttpClient
:
The request was aborted: Could not create SSL/TLS secure channel.
我花了大量时间研究这一点,我理解为什么会发生这种情况,以及强制使用更安全协议的各种选择。然而,我完全无法理解为什么问题服务器和运行PowerShell 5.1的Windows 10工作站之间存在不同的默认值。
在服务器(Windows 2016 Standard)上,脚本出现故障:
我认为这是默认值
安全协议
,特定弱协议:
PS > [Net.ServicePointManager]::SecurityProtocol
Ssl3, Tls
$PsVersionTable
返回以下内容:
Name Value
---- -----
PSVersion 5.1.14393.3866
PSEdition Desktop
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0...}
BuildVersion 10.0.14393.3866
CLRVersion 4.0.30319.42000
WSManStackVersion 3.0
PSRemotingProtocolVersion 2.3
SerializationVersion 1.1.0.1
在我的工作站(Windows 10 2004)上,脚本工作:
A.
安全协议
属于
SystemDefault
:
PS > [Net.ServicePointManager]::SecurityProtocol
SystemDefault
对于
$pVersionTable
:
Name Value
---- -----
PSVersion 5.1.19041.546
PSEdition Desktop
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0...}
BuildVersion 10.0.19041.546
CLRVersion 4.0.30319.42000
WSManStackVersion 3.0
PSRemotingProtocolVersion 2.3
SerializationVersion 1.1.0.1
正如你所看到的,两者的回报不同
安全协议
默认值,但它们似乎只有较小的PS版本不同;
5.1.14393.3866
vs
5.1.19041.546
.
服务器和工作站都有相当普通的设置。没有对任何一个框进行任何建议默认为更安全协议的注册表更改;即
SchUseStrongCrypto
,属性位于
HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols
等。两台服务器都有多达个。已安装NET Framework 4.8。
我真的不知道还有什么地方可以看,因为如果一个小PS版本的差异会带来这种变化,我会感到惊讶。我错过了什么(Windows安全更新?)还是我不明白
安全协议
违约有效?