Kerberos 客户端允许在服务主体名称 (SPN) 中使用 IPv4 和 IPv6 地址主机名
从 Windows 10 版本 1507 和 Windows Server 2016 开始,Kerberos 客户端可以配置为支持 SPN 中的 IPv4 和 IPv6 主机名。
默认情况下,如果主机名是 IP 地址,Windows 不会尝试对主机进行 Kerberos 身份验证。 它将回退到其他已启用的身份验证协议,如 NTLM。 但是,应用程序有时会硬编码为使用 IP 地址,这意味着应用程序将回退到 NTLM 而不使用 Kerberos。 当环境转为禁用 NTLM 时,这可能会导致兼容性问题。
为了减少禁用 NTLM 的影响,引入了一项新功能,允许管理员在服务主体名称中使用 IP 地址作为主机名。 可通过注册表项值在客户端上启用此功能。
reg add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\Kerberos\Parameters" /v TryIPSPN /t REG_DWORD /d 1 /f
要在 SPN 中配置对 IP 地址主机名的支持,请创建 TryIPSPN 项。 默认情况下,注册表中不存在此项。 创建该项后,将 DWORD 值更改为 1。 在需要通过 IP 地址访问受 Kerberos 保护的资源的每台客户端计算机上,需要设置此注册表值。
将服务主体名称配置为 IP 地址
服务主体名称是一个唯一标识符,用于在 Kerberos 身份验证期间标识网络上的服务。 SPN 由服务、主机名和可选的端口(格式为 service/hostname[:port]
)组成,例如 host/fs.contoso.com
。 当计算机加入 Active Directory 时,Windows 将向计算机对象注册多个 SPN。
通常不使用 IP 地址代替主机名,因为 IP 地址通常是临时的。 当地址租约到期和续订时,这可能会导致冲突和身份验证失败。 因此,注册基于 IP 地址的 SPN 是一个手动过程,只有在无法切换到基于 DNS 的主机名时才应使用。
推荐的方法是使用 Setspn.exe 工具。 请注意,SPN 一次只能注册到 Active Directory 中的一个帐户,因此如果使用 DHCP,建议 IP 地址具有静态租约。
Setspn -s <service>/ip.address> <domain-user-account>
例如:
Setspn -s host/192.168.1.1 server01