2015-11-22 64 views
1

我正在運行Tomcat 8 Web服務器。我想強制用戶使用Kerberos SSO身份驗證。所以我禁用了服務器上的所有NTLM通信。在AS-REP階段後Kerberos身份驗證停止

在我的調試環境中,使用this guide的所有內容都能平穩運行。 當移動到我的作品時,使用不同的域和服務器,認證失敗。

在比較的兩種環境的客戶Wireshark的結果,我發現成功連接到服務器包含以下包:

HTTP GET (client -> sever) 
HTTP 401 Unauthorized (server -> client) (WW-Authenticate: Negotiate) 
AS-REQ (client -> DC) 
KRB Error: KRB5KDC_ERR_PREAUTH_REQUIRED (DC -> client) (I understand that this is normal?) 
AS-REQ (client -> DC) 
AS-REP (DC -> client) 
TGS-REQ (client -> DC) 
TGS-REP (DC -> client) 

在我的生產環境中,使用類似的客戶端和服務器端配置(據我所知),客戶端在AS-REP數據包後停止,而不是請求帶有TGS-REQ數據包的票證,而是立即發送HTTP GET NTLMSSP_NEGOTIATE數據包

我無法找到原因爲此發生。我比較了兩個客戶端之間的類似數據包,我找不到任何區別。看起來客戶端在從服務器接收到AS-REP後才放棄,而不是請求Kerberos票據,而是決定使用NTLM身份驗證。

我打開Kerberos的記錄,我收到任何錯誤,並且有在AS-REP和NTLM請求之間沒有數據包(除了TCP FIN數據包發送到DC)

有誰知道什麼可能導致這樣的問題?我一直在尋找,似乎無法找到關於這個問題的很多信息。

回答

0

KRB錯誤:KRB5KDC_ERR_PREAUTH_REQUIRED(DC - >客戶端) - 這是正常的。這是因爲preauthentication默認打開,以提高安全性。客戶端首先發送AS-REQ而沒有預先確認,如果這種請求被拒絕,則使用預先確認再次發送AS-REQ。

當您修改配置時,例如解決Kerberos問題時,請記住在運行其他測試之前始終清理Kerberos緩存。否則,你會對更改配置感到沮喪,但無法看到效果 - 所有這些都是因爲將使用緩存的Kerberos票據。您可以使用KerbTray來清除緩存。

爲什麼選擇NTLM?由於AD無法找到具有請求的SPN的用戶。對於http服務器,它應該看起來像:HTTP/@ REALM。 AD必須找到一個用戶,因爲它需要他/她的密碼才能生成TGS。