Apache-2.2

Apache2,Kerberos:gss_accept_sec_context() 失敗:請求了不受支持的機制

  • June 4, 2020

我想在帶有 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。我相信您也可以以某種方式允許這樣做,但簡單的解決方法是更改​​指向伺服器的主機名(然後為該域創建一個新的密鑰表)。

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