【问题标题】:Powershell 4 too old for tls 1.2?Powershell 4 对于 tls 1.2 来说太旧了?
【发布时间】:2020-03-10 12:32:52
【问题描述】:

我有一个带有 powershell 4 的 Windows Server 2012R2。

一个 sql 作业发出一个 Invoke-WebRequest https://someserver/file.xml -OutFile c:/tmp/data.xml"

即使我遵循,它也会因 ssl 错误而失败 Powershell Invoke-WebRequest Fails with SSL/TLS Secure Channel 并在前面加上 [Net.ServicePointManager]::SecurityProtocol = "tls12, tls11, tls" 或其他变体。

powershell 4 太旧了吗?

我应该尝试从https://github.com/PowerShell/PowerShell/releases 安装 Wowershell 6 还是 7?

这会被 sqljob 调用,还是应该在某处/以某种方式指定它应该运行 v7 而不是 v4?

PS:我知道“虽然 Windows Server 2012 R2 在 2013 年 11 月 25 日进入主流支持,但它的主流结束是 2018 年 1 月 9 日,扩展结束是 2023 年 1 月 10 日” 但现在升级不是一种选择。

编辑

我安装了powershell 5.1,没变


Major  Minor  Build  Revision
-----  -----  -----  --------
5      1      14409  1005

然后做

[Net.ServicePointManager]::SecurityProtocol = "tls12, tls11, tls"

但仍然得到 Invoke-WebRequest : The request was aborted: Could not create SSL/TLS secure channel.

编辑 2

PS C:\Users\leif> $PSVersionTable

Name                           Value
----                           -----
PSVersion                      5.1.14409.1005
PSEdition                      Desktop
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}
BuildVersion                   10.0.14409.1005
CLRVersion                     4.0.30319.42000
WSManStackVersion              3.0
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1

【问题讨论】:

  • 对于 2012R2,我强烈建议安装 Windows Management Framework 5.1(包括 PowerShell 5.1),然后使用 [ServicePointManager]::SecurityProtocol = 'Tls12' 重试

标签: powershell


【解决方案1】:

我相信是的。 Powershell 在底层依赖于 .Net 框架。 PS 版本 4 使用 .Net 4.0,我相信它默认不支持添加或启用 TLS 1.2。

见: https://docs.microsoft.com/en-us/powershell/scripting/install/windows-powershell-system-requirements?view=powershell-7

TLS 1.2 成为 .Net 4.6 中的默认协议 看: https://blogs.perficient.com/2016/04/28/tsl-1-2-and-net-support/

请注意: 网络 4.0。不支持 TLS 1.2

因此,您需要按照其他人的建议或升级到 WMF 5.1 来围绕它编写代码。在完成升级之前,请确保它不会破坏任何东西。某些 MS 产品(如 SharePoint)可能与较新版本不兼容。

另外,尝试通过以下方式设置您的 TLS:

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

以上假设支持 PowerShell 版本。

【讨论】:

  • 我将在 SQL 作业步骤中使用它。
  • 我已经安装了wmf 5.1,没有区别。
  • 好吧,我将从最低级别开始...这是否适用于运行该作业的服务器上的基本 PowerShell Windows?是/否将决定你如何从那里开始。如果您有 WMF 5.1 并使用我在上面发布的代码,那么它应该可以在 PowerShell 控制台中运行。我使用带有该代码的 invoke-webrequest 安排了大约 50 个作业。测试它,但我认为问题可能出在 powershell 以外的地方。如果您想使用 XML 文件,您可能需要在 PowerShell 中安排一个单独的作业来下载它,然后在 SQL 中安排另一个作业来使用它。
  • 它不在 powershell 中运行。它适用于支持 tls 1.1 的外部服务器而不适用于仅支持 tls 1.2 和 1.3 的“XML-服务器”也许我必须降级我的服务器安全性以启用 1.1
  • 我的意思是它在 powershell 5.1 窗口中失败了。
猜你喜欢
  • 2018-05-15
  • 2013-05-11
  • 1970-01-01
  • 1970-01-01
  • 2019-07-29
  • 2020-08-08
  • 2012-07-22
  • 2020-07-16
  • 1970-01-01
相关资源
最近更新 更多