无法为 Reporting Services 配置 Kerberos

无法为 Reporting Services 配置 Kerberos

语境

我正在尝试在域中配置 Kerberos 以进行双跳身份验证。因此,以下是机器及其各自的角色:

  • client01:Windows 7 作为客户端
  • dc01:Windows Server 2008 R2 作为域控制器和 DNS
  • server01:Windows Server 2008 R2 作为报告服务器(本机模式)
  • server02:Windows Server 2008 R2 作为 SQL Server 数据库引擎

我希望使用集成安全client01连接server01并配置位于的数据源server02。由于 NTLM 无法将凭据推送到那么远,因此我需要设置 Kerberos 以启用双跳身份验证。报告服务由网络服务服务帐户运行,并且仅配置了RSWindowsNegotiate身份验证选项。

问题

在配置数据源时,我无法将我的client01凭证传递给。因此我收到错误:server02server01

Login failed for user 'NT AUTHORITY\ANONYMOUS LOGON'.

因此我继续dc01将任何服务的完全信任委托给,server01但这并没有解决问题。我注意到我没有配置任何 SPN,因为server01Reporting 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 捕获了我的本地网络,但是每当我尝试配置我的数据源以client01server01我的凭据传递给 时,我的客户端永远不会向 上的 KDCserver02发送AS_REQ或。TGS_REQdc01

问题

那么有人可以告诉我是否应该配置 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可以查看“ ”以检查感兴趣的值在林中是否重复。

相关内容