
我的客戶需要在 Windows 網域中為我的基於 Linux 的 Web/應用程式伺服器進行 SSO。伺服器安裝了自己的密鑰表,一切正常。 Windows 網域 (EXAMPLE.ORG) 具有與 SPN HTTP/server.example.org 相關的服務使用者帳戶。我的應用程式伺服器 (WildFly) 需要 Kerberos 驗證並拒絕 NTLM 驗證。
我有使用預設設定建立的測試網域(基於 2016)。我試圖在測試域中重複此設置,但無法使 Kerberos 工作。我看到來自伺服器的協商請求,但客戶端始終傳回 NTLM 票證。
WWW-Authenticate: Negotiate (request)
Authorization: Negotiate TlRMTVNTU..... (reply)
在客戶基礎設施中,我看到 Kerberos 票證也是如此
WWW-Authenticate: Negotiate (request)
Authorization: Negotiate YIIHmAYGKw.... (reply)
我看到的唯一差異(除了 GPO 之外)是我的 SPN 不在同一 DNS 網域內。我的 AD 網域是 tdm.sample.org,伺服器是 server.sample.org,我不知道這是否重要。
不久前我在域內也遇到了同樣的問題。 IE 用戶端和帶有 IIS 加入相同網域的 Windows Server 2016 也都使用 NTLM。
我相信很少有 GPO 設定來規範客戶端如何授權或不授權,但我讀過的文件都沒有幫助。
是否有任何明確的描述 Kerberos 用戶端身份驗證有哪些限製或可以應用的任何提示或偵錯策略?
答案1
當 Windows 甚至不嘗試 Kerberos 授權時,會有一些限制。
1. SPN指向PTR,而不是Web別名
如果您的非網域成員 Web 伺服器有別名,則無需在該別名上指派 SPN。它將根據該伺服器的真實 DNS 記錄進行檢查。
假設你有這個:
A record server.example.org -> 10.0.0.1
PTR record 10.0.0.1 -> server.example.org
CNAME record webapp.example.org -> server.example.org
訪問webapp.example.org您不需要 SPNHTTP/webapp.example.org,你應該分配HTTP/server.example.org僅適用於服務記錄。我認為如果沒有 PTR 記錄,它應該是一個 IP 位址。
2. 域成員不得以任何其他名稱稱呼。
我有一台啟用了 IIS 和 Windows 整合式驗證的網域成員伺服器。由於我的網路設置,它在非網域和網域網路中都有 DNS 設定:
srv.example.org -> 10.0.0.1
10.0.0.1 -> srv.example.org
它還在網域中註冊:
srv.tdm.example.org -> 10.0.0.1
如果作為 srv.example.org 訪問,該伺服器將不允許 Kerberos,只有當作為 srv.tdm.example.org 訪問時,Kerberos 才會工作。如果是透過IP位址存取的話更是無法運作。
我猜這個事實的本質是由網域中的 Windows 名稱解析引起的,這通常發生在 DNS 之前。
我將繼續搜尋並更新此答案。