
以下是 Apache HTTP Kerberos 模組配置/etc/apache2/sites-available/my.server.tld.conf
:
# ...
<Location />
Authname "SSO Authentication"
AuthType Kerberos
KrbAuthRealms MY.DOMAIN.TLD
KrbServiceName HTTP/[email protected]
Krb5Keytab /etc/apache2/kerb5.my.server.tld.ktab
KrbMethodNegotiate On
KrbMethodK5Passwd On
Require valid-user
</Location>
# ...
以及 Kerberos 設定/etc/krb5.conf
:
[libdefaults]
default_realm = MY.DOMAIN.TLD
# ...
[realms]
MY.DOMAIN.TLD = {
kdc = my.ad.server.1.tld
kdc = my.ad.server.2.tld
admin_server = my.ad.server.1.tld
}
# ...
[domain_realm]
friendly.domain.tld = MY.DOMAIN.TLD
.friendly.domain.tld = MY.DOMAIN.TLD
# ...
Apache HTTP Web 伺服器安裝在 Debian GNU/Linux 10 上。
keytab 檔案my.ad.server.1.tld
是使用下列命令在 Windows Server上產生的ktpass
。
透過此配置,網域中 Windows 電腦上的 Edge 和 Firefox 一切正常MY.DOMAIN.TLD
。
我的問題來自於在網域外的 Windows 電腦上使用 Microsoft Edge(具有 Chromium 引擎的新瀏覽器)或 Google Chrome 的客戶。
第一次連接到 時my.server.tld
,瀏覽器會收到WWW-Authenticate: Negotiate
和WWW-Authenticate: Basic realm="SSO Authentication"
標頭。
與 Firefox 不同,使用 Microsoft Edge 時,彈出的身份驗證對話框WWW-Authenticate: Negotiate
不是來自瀏覽器的身份驗證對話框,而是 Windows 身份驗證對話框,而且無論我們輸入什麼內容,它都不起作用。
第一次登入嘗試失敗後,瀏覽器會發出第二次請求,這次他只收到標頭WWW-Authenticate: Basic realm="SSO Authentication"
。彈出瀏覽器身份驗證對話框,並且它可以工作。進一步的內部導覽my.server.tld
將會在背景產生許多Windows身份驗證對話方塊。例如,如果頁面上有圖像,它將顯示一個身份驗證對話框。
我注意到,如果 Windows 電腦連接在 的內部網路中,MY.DOMAIN.TLD
並且我們在 Windows 驗證對話方塊中明確指定網域,它也可以正常工作(即[email protected]
作為使用者名稱)。
考慮到以上所有內容,我現在想知道...
- 實際上是否可以使其與 Windows 電腦上的整合式 Windows 驗證對話方塊一起使用?
- 有沒有辦法「強制」將網域用於身份驗證,從而無需像
[email protected]
網域外的電腦那樣明確指定它MY.DOMAIN.TLD
?
我已經嘗試在Debian GNU/Linux 10 伺服器上新增default_domain = my.domain.tld
Kerberos 領域配置或取得 Kerberos TGT,但沒有成功。kinit
讀取Apache HTTP的各種情況的日誌LogLevel trace8
,看起來只要彈出Windows身份驗證對話框,就會返回NTLM令牌,這使得它無法正常工作。
當它起作用時
使用 Firefox 隨時隨地
或者
使用網域內的電腦、內部網路(Edge 或 Chrome)
或者
使用網域外、外部網路並使用[email protected]
(Edge 或 Chrome)的電腦:
mod_authz_core.c(820): AH01626: authorization result of Require valid-user : denied (no authenticated user yet)
mod_authz_core.c(820): AH01626: authorization result of <RequireAny>: denied (no authenticated user yet)
src/mod_auth_kerb.c(1963): kerb_authenticate_user entered with user (NULL) and auth_type Kerberos
src/mod_auth_kerb.c(1296): Acquiring creds for HTTP/my.server.tld
src/mod_auth_kerb.c(1719): Verifying client data using KRB5 GSS-API
src/mod_auth_kerb.c(1735): Client didn't delegate us their credential
src/mod_auth_kerb.c(1754): GSS-API token of length 180 bytes will be sent back
mod_authz_core.c(820): AH01626: authorization result of Require valid-user : granted
mod_authz_core.c(820): AH01626: authorization result of <RequireAny>: granted
當它不起作用時
對於網域、外部網路(Edge 或 Chrome)以外的電腦:
mod_authz_core.c(820): AH01626: authorization result of Require valid-user : denied (no authenticated user yet)
mod_authz_core.c(820): AH01626: authorization result of <RequireAny>: denied (no authenticated user yet)
src/mod_auth_kerb.c(1963): kerb_authenticate_user entered with user (NULL) and auth_type Kerberos
src/mod_auth_kerb.c(1296): Acquiring creds for HTTP/my.server.tld
src/mod_auth_kerb.c(1719): Verifying client data using KRB5 GSS-API
src/mod_auth_kerb.c(1735): Client didn't delegate us their credential
src/mod_auth_kerb.c(1763): Warning: received token seems to be NTLM, which isn't supported by the Kerberos module. Check your IE configuration.
src/mod_auth_kerb.c(1156): GSS-API major_status:00010000, minor_status:00000000
gss_accept_sec_context() failed: An unsupported mechanism was requested (, Unknown error)
所有這一切令人煩惱的部分是它在 Firefox 上完美運行,但不適用於具有最新 Chromium 引擎的瀏覽器。是因為它退回到 NTLM 驗證而不是基本驗證嗎?
答案1
我可能是錯的,但對我來說,導航器僅將 Kerberos 憑證傳送到受信任的網站。因此,對於網域中的計算機,它們的導航器將您的網路伺服器視為「內部網路」網站(= 受信任,= 可以發送憑證)。但對於其他人來說,您的網頁伺服器發出的憑證請求將被丟棄。那麼,也許透過在外部電腦的受信任網站中新增網路伺服器的 FQDN 就能達到目的?