问题描述
我在运行带有PowerShell 5.1的Windows 2016 Standard服务器上运行的脚本时遇到问题,由于使用SecurityProtocol
发出Web请求时默认使用HttpClient
,该脚本失败了:
The request was aborted: Could not create SSL/TLS secure channel.
我花了很多时间研究此问题,并且我理解了为什么会发生这种情况,并了解了可用于强制实施更安全协议的各种选项。但是,我完全坚持为什么在问题服务器和运行PowerShell 5.1的Windows 10工作站之间看到不同的默认值。
在脚本失败的服务器上(Windows 2016 Standard):
对于默认的SecurityProtocol
,特定的弱协议,我看到了这一点:
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),脚本在其中运行:
SecurityProtocol
中的SystemDefault
:
PS > [Net.ServicePointManager]::SecurityProtocol
SystemDefault
和$PsversionTable
:
Name Value
---- -----
Psversion 5.1.19041.546
PSEdition Desktop
PSCompatibLeversions {1.0,4.0...}
BuildVersion 10.0.19041.546
CLRVersion 4.0.30319.42000
WSManStackVersion 3.0
PSRemotingProtocolVersion 2.3
SerializationVersion 1.1.0.1
如您所见,这两个返回不同的SecurityProtocol
默认值,但是它们之间的差别仅在于次要PS版本。 5.1.14393.3866
与5.1.19041.546
。
服务器和工作站的设置都相当原始。任一框均未进行任何建议默认更改为更安全协议的注册表更改;即SchUseStrongCrypto
,HKLM:\SYstem\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols
下的属性等。两台服务器均已安装并包含.NET Framework 4.8以下版本。
我真的不知道在其他地方可以看到,如果较小的PS版本的不同会带来此更改,我会感到惊讶。我是否错过了某些内容(Windows安全更新?)还是不了解SecurityProtocol
默认设置的工作原理?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)