语境
我正在尝试在域中配置 Kerberos 以进行双跳身份验证。因此,以下是机器及其各自的角色:
client01
:Windows 7 作为客户端dc01
:Windows Server 2008 R2 作为域控制器和 DNSserver01
:Windows Server 2008 R2 作为报告服务器(本机模式)server02
:Windows Server 2008 R2 作为 SQL Server 数据库引擎
我希望使用集成安全client01
连接server01
并配置位于的数据源server02
。由于 NTLM 无法将凭据推送到那么远,因此我需要设置 Kerberos 以启用双跳身份验证。报告服务由网络服务服务帐户运行,并且仅配置了RSWindowsNegotiate
身份验证选项。
问题
在配置数据源时,我无法将我的client01
凭证传递给。因此我收到错误:server02
server01
Login failed for user 'NT AUTHORITY\ANONYMOUS LOGON'.
因此我继续dc01
将任何服务的完全信任委托给,server01
但这并没有解决问题。我注意到我没有配置任何 SPN,因为server01
Reporting Service 由网络服务运行,并且从我在互联网上看到的内容来看,当 Reporting Services 与网络服务一起运行时,SPN 会自动注册。我的问题是,即使我想手动配置 SPN,我也不知道在哪里设置它们。打开dc01
还是打开server01
?
因此,我进一步研究了这个问题,并试图追踪这个问题。根据我对 Kerberos 的理解,当我尝试连接数据源时,网络上应该发生以下情况:
client01 ---- AS_REQ ---> dc01
<--- AS_REP ----
client01 ---- TGS_REQ ---> dc01
<--- TGS_REP ----
client01 ---- AP_REQ ---> server01
<--- AP_REP ----
server01 ---- TGS_REQ ---> dc01
<--- TGS_REP ----
server01 ---- AP_REQ ---> server02
<--- AP_REP ----
因此使用 Wireshark 捕获了我的本地网络,但是每当我尝试配置我的数据源以client01
将server01
我的凭据传递给 时,我的客户端永远不会向 上的 KDCserver02
发送AS_REQ
或。TGS_REQ
dc01
问题
那么有人可以告诉我是否应该配置 SPN 以及必须在哪台机器上进行配置吗?
另外,为什么client01
从不向我的 KDC 请求 TGT 或 TGS。您认为的 DC 角色出了什么问题吗dc01
?
答案1
应在代表服务身份的计算机或用户对象上配置 SPN。如果 server01 上相关服务在网络服务下运行,则应确保在代表 server01 的计算机帐户上配置了正确的 SPN。您可以通过运行"setspn -l server01
“来检查它。该命令本身可以从任何地方运行,因为它将与 DC 通信并检查对象的 serviceprincipalname LDAP 属性。因此,只要您有 setspn.exe 二进制文件,您就可以从 dc01 或 server01 或其他任何地方运行它。您可以通过运行查看所有语法"setspn /?"
如果它们没有配置(如上面的命令所验证),您可以使用相同的二进制文件但使用不同的语法添加它们。“-A”开关的示例语法通过运行“添加值”setspn -A http/server01 server01".
示例假设服务正在运行的端口是 80 或 443。
您必须小心确保 SPN 未在 AD 林中的任何其他地方注册,因为 SPN 必须是唯一的。当您执行类似操作时,“-Q”开关可以检查 SPN 是否存在于任何位置"setspn -F -Q http/server01"
。
在 Wireshark 或任何其他网络跟踪工具中,您只会看到 kerberos 流量,前提是客户端尚未缓存资源的票证,并且没有指示 SPN 不可用的负缓存。如果您尝试了几次,然后启动 Wireshark 查看发生了什么,如果 SPN 完全丢失,则很可能涉及负缓存。否则,如果您已经缓存了票证,它将被重用,并且不会再请求票证。
在进行网络跟踪以排除故障之前,请务必刷新客户端“ ”上的 DNS 缓存ipconfig /flushdns
和 Kerberos 缓存“ klist purge
”。这将显示 KDC 位置的名称解析流量,并尝试获取未本地缓存的票证。
http://msdn.microsoft.com/en-us/library/cc281253.aspx看起来是 SSRS 方面的一个很好的资源。有关 kerberos 故障排除的帮助,请参阅 askds 博客文章,其中针对 kerberos 开头http://blogs.technet.com/b/askds/archive/2008/06/13/understanding-kerberos-double-hop.aspx.然后回顾http://blogs.technet.com/b/askds/archive/2008/05/29/kerberos-authentication-problems-service-principal-name-spn-issues-part-1.aspx以及您认为合适的其他文章。
只要 KDC 服务正在运行,并且能够找到在其数据库中注册的相关 SPn,并且该 SPn 在林中的其他地方没有重复,DC01 就会发出票证。该值必须是唯一的。setspn -x -f
可以查看“ ”以检查感兴趣的值在林中是否重复。