我们正在尝试将 CredSSP 身份验证用于多跳 PowerShell 远程处理,并且我们的一个客户端遇到了一个障碍,阻止他们在指定目标服务器的 FQDN 时使用 CredSSP 创建 PSSession。服务器和客户端都加入了同一个域,并且不相交的命名空间没有什么特别的。
在调试过程中,我们把能想到的所有相关安全选项都打开了;具体来说:
- 我们已启用 GP 设置以允许使用通配符 SPN wsman/* 委派新凭据(标准和“仅使用 NTLM”)
- 我们已使用 *.domain.com 启用 WSMan 受信任主机设置
- 我们(当然)在服务器和客户端上为 CredSSP 启用了 WSMan
- 我们在服务器上设置了 LocalAccountTokenFilterPolicy
打开所有这些设置后,我们在为 PSSession 尝试不同的身份验证方法时会得到以下结果:
- 使用 Kerberos 进行具有显式域凭据的委派工作正常。
- 使用 Negotiate 进行具有显式域凭据的委派工作正常。
- 使用 CredSSP 进行委派:
- 使用域凭据连接到服务器的 FQDN 失败并显示错误当前没有可用于服务登录请求的登录服务器
- 使用域凭据,仅连接到服务器的主机名,失败并出现相同的错误
- 使用服务器上本地帐户的凭据(我相信因此强制 NTLM 进行服务器身份验证),连接到服务器的 FQDN,工作正常
- 使用域凭据,连接到服务器的 IP 地址(从而强制 NTLM 进行服务器身份验证),工作正常
因此,简而言之,只要我们使用 NTLM 进行服务器身份验证,CredSSP 就可以工作,而当我们使用 Kerberos 时,CredSSP 就会失败,但是如果我们也使用 Kerberos 进行委派,Kerberos 肯定可以正常工作。这怎么可能,我们可以做些什么来使 CredSSP+Kerberos 正常工作?