Authentication

無法為 Reporting Services 配置 Kerberos

  • April 14, 2012

語境

我正在嘗試在域中配置 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在. _ server02_ server01因此我得到錯誤:

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

因此,我繼續對dc01任何服務授予完全信任,server01但它並沒有解決問題。我想注意到我沒有配置任何 SPN,server01因為 Reporting Service 是由網路服務執行的,並且從我在 Internet 上閱讀的內容來看,當 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 擷取了我的本地網路,但是每當我嘗試從client01on配置我的數據源server01以將我的憑據傳遞給 時server02,我的客戶端從不發送AS_REQorTGS_REQ到 KDC on dc01

問題

那麼有誰可以告訴我是否應該配置 SPN 以及必須在哪台機器上配置它?

另外,為什麼client01從不向我的 KDC 請求 TGT 或 TGS。你認為DC角色有什麼問題dc01嗎?

應在代表服務標識的電腦或使用者對像上配置 SPN。如果 server01 上的相關服務在網路服務下執行,那麼您將確保在代表 server01 的電腦帳戶上配置了正確的 SPN。您可以通過執行"setspn -l server01“來檢查它。命令本身可以從任何地方執行,因為它會與 DC 通信並檢查對象的 serviceprincipalname LDAP 屬性。因此,您可以從 dc01 或 server01 或其他任何地方執行它,只要您有setspn.exe 二進製文件。您可以通過執行查看所有語法"setspn /?"

如果它們未配置(如上述命令驗證),您將使用相同的二進製文件但使用不同的語法添加它們。“-A”開關的範例語法通過執行“添加值”setspn -A http/server01 server01".該範例假定服務正在執行的埠是 80 或 443。

您必須小心確保 SPN 未在 AD 林中的其他任何地方註冊,因為 SPN 必須是唯一的。當您執行類似"setspn -F -Q http/server01".

在 Wireshark 或任何其他網路跟踪工具中,您只會看到 kerberos 流量,前提是客戶端還沒有資源的記憶體票證,並且沒有指示 SPN 不可用的負記憶體。如果您嘗試了幾次然後啟動 Wireshark 以查看發生了什麼,如果 SPN 完全失去,則可能涉及負記憶體。否則,如果您已經記憶體了一張票,這將被重複使用,並且不會再請求更多票。

在進行網路跟踪以進行故障排除之前,請始終在客戶端“ ipconfig /flushdns”和 kerberos 記憶體“ ”上刷新 dns 記憶體。klist purge這將顯示 KDC 位置的名稱解析流量,並在未本地記憶體時嘗試獲取票證。

http://msdn.microsoft.com/en-us/library/cc281253.aspx看起來像是 SSRS 方面的一個很好的資源。有關 kerberos 在故障排除方面的幫助,請參閱以http://blogs.technet.com/b/askds/archive/2008/06/13/understanding-kerberos-double-hop.aspx開頭的針對 kerberos 的 askds 部落格文章。然後像你一樣查看http://blogs.technet.com/b/askds/archive/2008/05/29/kerberos-authentication-problems-service-principal-name-spn-issues-part-1.aspx和其他文章覺得合適。

DC01 將發出票證,前提是 KDC 服務正在執行,並且它可以找到在其數據庫中註冊的相關 SPn,並且前提是它在林中的其他地方沒有重複。該值必須是唯一的。setspn -x -f可以查看" " 以檢查感興趣的值是否在森林中重複。

引用自:https://serverfault.com/questions/379144