RDP 客户端错误 - 发生身份验证错误(0x609)

RDP 客户端错误 - 发生身份验证错误(0x609)

我有一台名为 ws24(192.168.1.168)的计算机和另一台名为 srvPPassTest2 的计算机。

我编写了一个在 ws24 上运行的程序,它是一个“RDP 代理”。它接受来自端口 7070(可配置)上的 RDP 客户端的连接,并将其转发到 srvPPassTest2。我执行以下操作来配置计算机以使用代理:

  • 我使用以下命令为代理创建证书:
    ./makecert -n "CN=ws24.pleasant.local" -pe -ss Root -sr localMachine -sky exchange -m 120 -r -a sha1 -eku 1.3.6.1.5.5.7.3.1
    • 然后我使用私钥导出它来创建代理将使用的 .pfx。
    • 我还将其导出(不带私钥)并将其导入 srvPPassTest2 的证书(本地计算机) - 受信任的根证书颁发机构/证书文件夹。

  • Enable-WSManCredSSP -role client -DelegateComputer srvPPassTest2 Enable-WSManCredSSP -role client -DelegateComputer ws24 Enable-WSManCredSSP -role client -DelegateComputer 192.168.1.168
    在 ws24 上运行。我确信它们不是全部必需的,但它还没有工作,所以我正在尝试一切。
  • 在 ws24 上我进行了以下注册表更改:
    • HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\Security Packages - 添加 tspkg
    • HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders - 添加 credssp.dll
  • Enable-WSManCredSSP -role Server在 srvPPassTest2 上运行。

如果在 WSManCredSSP 调用中遇到任何错误,请先尝试调用 Enable-PSRemoting。


当我运行 rdp 代理并使用 RDP 客户端连接它时发生的情况如下:

  • 在 ws24 上,我使用 RDP 客户端连接到 192.168.1.168:7070。使用 ip 地址而不是名称可以防止客户端响应您无法连接到自己。
  • 代理接收并修改(如有必要)RDP 协议的 ConnectionRequestPDU 消息,以确保 SupportedProtocol 标志设置为 ProtocolHybrid 和 ProtocolSSL。这将确保使用 CredSSP。该消息被转发到 srvPPassTest2。
  • 代理 mitm 的 TLS 握手。
  • 代理接收客户端的 NTLMNegotiate 消息,从中获取一些信息并创建一个新的消息转发给目标 srvPPassTest2。
  • NTLMChallenge 和 NTLMAuthentication 也是如此。
    • 此时,RDP 客户端和服务器运行正常。它们不会返回错误或表现出奇怪的行为。
  • 机器交换证书公钥,并使用来自 NTLM 交换的密钥加密。
  • 客户端发送带有 TSCredential 的 TSRequest。代理接收该请求,验证信息并构造一个带有不同凭据的请求,发送给 srvPPassTest2。
  • 转发客户端消息,长度 462
  • 来自 srvppasstest2 的转发消息,长度 108
  • 来自客户端的转发消息,长度12

然后我从 rdp 客户端收到一个错误弹出窗口:

发生身份验证错误(代码:0x609)
远程计算机:192.1.168.1.168


当我查找错误 0x609 时,唯一相关的结果是这里我已经按照这些步骤操作了。需要注意的一件重要事情是:3 个月前我曾使用过此代理。然后 srvPPassTest2 恢复到以前的状态,现在代理无法正常工作。我无法将 srvPPassTest2 恢复到正常工作时的状态,该虚拟机不是我的,快照也不是由 IT 保存的 >:(

在哪里可以找到有关代码 0x609 的信息?

我在 ws24 或 srvPPassTest2 上还遗漏了哪些可能的设置?我认为证书可能应该位于 srvPPassTest2 上的另一个文件夹中,但我不知道是哪个。

我可以采取什么措施来排除故障?NTLM 和 TSCredential 交换均运行正常。

答案1

错误就出现在这一步:

  • 代理接收并修改(如有必要)RDP 协议的 ConnectionRequestPDU 消息,以确保 SupportedProtocol 标志设置为 ProtocolHybrid 和 ProtocolSSL。这将确保使用 CredSSP。该消息被转发到 srvPPassTest2。

事实证明,我还必须在 ConnectionRequestPDU 中设置 ProtocolHybridEx 标志。我猜这是因为转发的消息(TSCredential 之后的消息)关心此标志。

既然如此,我决定只转发客户端使用的标志,而不是自己构建它们。如果没有设置 ProtocolHybrid 标志,我会轻轻地出错,因为我们需要使用网络级身份验证 (NLA)。

相关内容