具有 Kerberos 的 Apache HTTP 無法與域外電腦上的 Chromium 支援的導航器一起使用

具有 Kerberos 的 Apache HTTP 無法與域外電腦上的 Chromium 支援的導航器一起使用

以下是 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: NegotiateWWW-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.tldKerberos 領域配置或取得 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 就能達到目的?

相關內容