PowerShell 脚本 - SSL/TLS 安全通道失败

PowerShell Script - SSL/TLS secure channel fail

提问人:André IT 提问时间:10/6/2023 更新时间:11/22/2023 访问量:229

问:

我一直在尝试使用 POST 与安全的 REST API 进行通信,并正确传递证书,但我仅在生产服务器上收到错误“请求已中止:无法创建 SSL/TLS 安全通道”。

我没有升级 Microsoft Windows Server 2008 R2 的选项。

已安装 Microsoft Framework 4.8,已应用所有修补程序,并启用了所有安全协议。

enter image description here

enter image description here

--在服务器 2008 上使用 POSTMAN 运行相同的 POST 效果很好

enter image description here

你们中有人知道为什么 PowerShell 脚本不仅适用于服务器吗?

在本地运行相同的 Powershell 脚本,它在 Windows 11 下完美运行

enter image description here

你们有什么建议吗?到目前为止,我已经尝试了很多东西,但没有任何效果:(

非常感谢

PowerShell SSL TLS1.2 Windows-服务器-2008-R2

评论

3赞 Joel Coehoorn 10/6/2023
您说您没有升级选项,但您知道 Server 2008 R2 已完全停产,并且已经停产好几年了,对吧?这意味着它在那段时间里没有任何更新......甚至没有关键的安全补丁,尽管有多个活跃的临界级 CVE。仍然使用它是危险和不负责任的。
2赞 TheMadTechnician 10/6/2023
可能还值得注意的是,NIST要求在2024年1月1日之前支持TLS1.3。因此,预计与政府合作的服务将在不久的将来迁移到 TLS1.3。目前,如果您将 Microsoft Server 用于您的操作系统,这意味着升级到 2022,因为 2019 年将不支持 TLS1.3 大约一年。
0赞 Joel Coehoorn 10/10/2023
@TheMadTechnician 那里的细节很棘手。该出版物称,服务必须支持并允许来自 TLS 1.3 客户端的连接,政府运营的客户端必须支持并首选 TLS 1.3(因此 TLS 1.3 将用于大多数连接),但不要求服务器删除或禁用 TLS 1.2,并且不声称对非政府客户端进行监管。这意味着 TLS 1.2 仍然可以用于面向公众的服务,只要 TLS 1.3 也是一种选择。

答:

2赞 Joel Coehoorn 10/6/2023 #1

您可能需要确保在注册表中为 SCHANNEL 启用 Tls1.2。从以下键开始:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\Tls12\Client

如果尚不存在,请创建它,并确保将 dword 设置为 。此外,在重新启动服务器之前,对 SCHANNEL 配置所做的任何更改都不会生效。Enabled1

接下来,检查注册表中是否将 .Net 配置为使用强加密协议:

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v2.0.50727]
      "SystemDefaultTlsVersions" = dword:00000001
      "SchUseStrongCrypto" = dword:00000001
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v4.0.30319]
      "SystemDefaultTlsVersions" = dword:00000001
      "SchUseStrongCrypto" = dword:00000001

那么 PowerShell 中的这一行实际上应该是有效的:

[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12

但是,正如我在评论中指出的那样,您确实应该尽一切努力获得升级服务器的权限。

Windows Server 2008 R2 已完全停用,并且已经停用了好几年。这意味着它在那段时间里没有任何更新......甚至没有关键的安全补丁,尽管有多个活跃的临界级 CVE。仍然使用它是危险和不负责任的;律师可能会使用“重大过失”之类的短语。

所有补丁都已应用...

我希望如此,因为几年来没有发布任何新补丁。

目前使用的最低安全版本是 Windows Server 2016(2012 R2 也在不到一周的时间内结束生命周期。这是一件值得找新工作的事情,因为当(而不是如果)这件事被破坏,你不想承担责任。

评论

0赞 André IT 10/6/2023
我完全同意你的看法。当像你这样的人阐明问题,然后提供这样的评论时,这是很了不起的。我将尽一切努力尽快迁移它。这个过程是艰巨的,客户不喜欢它,但他们必须接受它。
1赞 Joel Coehoorn 10/6/2023
@AndréIT 在支持像这样顽固的客户时,一个常见的策略是告诉他们,“这是你的解决办法。我今天给你们留下一个工作系统。但是,请注意,这是我们为此版本的 Windows Server 提供的最后一个修复程序。我们无法支持它向前发展。任何其他问题都需要先更新到受支持的版本,然后我们才能查看它们。然后,当然,你必须坚持这个任务......但这是为了他们自己的利益。
0赞 André IT 10/6/2023
谢谢,乔尔。我只是暂停了我的任务,因为以下步骤不起作用,我正在推动公司切换操作系统。我希望迁移到 Windows Server 2022 能够解决 TLS 问题和其他安全问题
0赞 Ebiko 11/22/2023 #2

或者,如果无法升级,或者您在所需的计算机上没有管理员,则可以使用 curl for windows(官方版本,而不是 PS Alias)(https://curl.se/windows/),因为它包含使用 TLS1.3 的必要库

让 curl 与 PS 一起使用可能有点工作,因为它与“Web-Session”和其他内置的东西没有相同的可能性,所以你需要自己写一个包装器才能让它工作,但它是可行的。