Powershell CREDSSP 和 TLS 1.2

Posted

技术标签:

【中文标题】Powershell CREDSSP 和 TLS 1.2【英文标题】:Powershell CREDSSP and TLS 1.2 【发布时间】:2018-05-24 15:25:36 【问题描述】:

服务器 A 是 Server 2008 R2、Powershell V3 启用所有 SSL 和 TLS 以及所有密码。 服务器 B 是 Server 2016、Powershell V5 和仅 TlS 1.2 和特定的密码集。

我无法让 Credssp 身份验证从 A 工作到 B,即使我使用

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

我知道这是每个会话的设置,因此我将其包含在脚本本身中。

如果我将服务器 B (Server 2016) 设置为开启所有 SSL 和 TLS 加密,那么 CREDSSP 工作没有问题。

是的,我需要使用 CREDSSP,因为服务器 B 上的脚本引用了服务器 A 上的文件共享。

这是我正在使用的脚本,同样,它在启用所有版本的 TLS 时有效。

$pass = ConvertTo-SecureString "password" -asplaintext -force
$mycred = new-object -typename System.Management.Automation.PSCredential -argumentlist "domain\user.service",$pass
#
#
# The Remote Execution Command. Fully Qualified Domain name is critical since we are using Credssp.
# Credssp is being used to resolve an issue with a double hop authentication issue. 
Invoke-Command -ComputerName ServerB.domain.edu -command  C:\HelloWorld.ps1  -Authentication Credssp  -Credential $mycred

我还没有尝试过但我会尝试的一件事是将服务器 A 和 B 都放在 TLS 1.2 上,看看它是否可以这样工作。这不是一个长期的解决方案,因为此时服务器 A 不能设置为仅 TLS 1.2。

【问题讨论】:

是的,实际上我尝试将服务器 A 设置为仅支持 TLS 1.2,但我仍然被拒绝访问。只有当我在两台服务器上都启用了 TLS 1.0 时,我才能让它工作。 唯一启用的密码是 TLS_RSA_WITH_AES_* 尝试在 2008 服务器上设置这个值,看看它是否有效(默认情况下它应该可以工作,但有些事情很愚蠢。我遇到了这个问题)[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NetFramework\v4.0.30319] "SchUseStrongCrypto"=dword:00000001跨度> 作为补充说明,请确保在 2008 服务器上应用补丁 KB3080079 以支持 RDP TLS1.2 和 KB3099845 以支持 .NET TLS1.2。 是的,我检查了这两个都应用了 【参考方案1】:

所以看起来问题与 Server 2008 有关,仅在 SCHANNEL Reg 设置上具有 TLS 的服务器子项的注册表项,而不是 TLS 的客户端子项。看图

一旦我添加了客户端子密钥并启用了 TLS 1.2 加密,它终于开始工作了。

【讨论】:

以上是关于Powershell CREDSSP 和 TLS 1.2的主要内容,如果未能解决你的问题,请参考以下文章

Powershell CREDSSP 问题

PowerShell Web 访问身份验证类型设置为 CredSSP 的问题

不建议在生产环境中使用 CredSSP

用于检查浏览器中启用的 TLS 1.2 的 Powershell 脚本

在 PowerShell 中,我应该使用哪种身份验证方案?

小程序报错 TLS 版本必须大于等于 1.2