Apache-2.2
Apache2,Kerberos:gss_accept_sec_context() 失敗:請求了不受支持的機制
我想在帶有 mod_auth_kerb 的 Linux 上使用 Kerberos 和 Apache 2。
我將 .htaccess 添加到我的項目中,如下所示:
#SSLRequireSSL AuthType Kerberos AuthName "Kerberos Login" KrbMethodNegotiate On KrbMethodK5Passwd Off KrbAuthRealms DOMAIN.COM Krb5KeyTab /etc/httpd/httpd.keytab KrbLocalUserMapping On require valid-user
當我嘗試在 IE 或 Firefox 上測試我的單點登錄時,我在 apache 日誌中收到以下錯誤:
[Thu Jan 19 21:03:27 2012] [error] [client 10.65.0.1] gss_accept_sec_context() failed: An unsupported mechanism was requested (, Unknown error)
我不知道它是什麼,我應該怎麼做才能讓它發揮作用。
我的目標是讓 REMOTE_USER 由 AD 使用者名填寫。但是現在因為這個錯誤我什麼都做不了……
在一個簡單的設置中,使用 mod_auth_gssapi 和 FreeIPA 作為 krb5 伺服器並生成密鑰表,我發現在
AuthType
命令旁邊添加以下內容可以解決問題。BrowserMatch Windows gssapi-no-negotiate
根據 andsens 的回答,這似乎確實發生在嘗試使用 NTLM 的 Windows 客戶端上。
GssapiAllowedMech krb5
並且GssapiBasicAuthMech krb5
不要給談判一個成功的結果,所以唯一的解決方案似乎是禁用談判。不過,我不能保證這是準確的,但它對我有用。對應的文件在這裡
我發現了此錯誤的另一個原因:
Windows 嘗試使用 NTLM 進行身份驗證。其實這就是問題的根源。
我不明白重新創建 keytab 有什麼幫助,然後錯誤將類似於“未找到密鑰表條目”。
當 Windows 無法從 KDC 獲取票證時,它會嘗試通過 NTLM 進行身份驗證。
對我來說,原因是我的伺服器不在同一個領域內。域是
ad.domain.com
,但我的伺服器位於something.domain.com
。我相信您也可以以某種方式允許這樣做,但簡單的解決方法是更改指向伺服器的主機名(然後為該域創建一個新的密鑰表)。