使用 mod_auth_kerb 的 apache 總是會要求輸入密碼兩次

使用 mod_auth_kerb 的 apache 總是會要求輸入密碼兩次

(Debian 擠壓)

我正在嘗試將 apache 設定為使用 Kerberos 驗證來允許 AD 使用者登入。配置的AuthName 字串(即:第一個視窗是通用使用者名稱/密碼,第二個視窗包含標題「Kerberos Login」)我不擔心整合Windows 驗證在這個階段的工作,我只是希望使用者能夠使用他們的AD 帳戶登錄,這樣我們就不需要設定第二個使用者帳戶儲存庫。

我該如何解決這個問題以消除第一個無用的提示?

apache2.conf 檔案中的指令:

<Directory /var/www/kerberos>
AuthType Kerberos
AuthName "Kerberos Login"
KrbMethodNegotiate On
KrbMethodK5Passwd On
KrbAuthRealms ONEVUE.COM.AU.LOCAL
Krb5KeyTab /etc/krb5.keytab
KrbServiceName HTTP/[email protected]
require valid-user
</Directory>

krb5.conf:

[libdefaults]
    default_realm = ONEVUE.COM.AU.LOCAL
[realms]
    ONEVUE.COM.AU.LOCAL = {
        kdc = SYD01PWDC01.ONEVUE.COM.AU.LOCAL
        master_kdc = SYD01PWDC01.ONEVUE.COM.AU.LOCAL
        admin_server = SYD01PWDC01.ONEVUE.COM.AU.LOCAL
        default_domain = ONEVUE.COM.AU.LOCAL
    }
[login]
    krb4_convert = true
    krb4_get_tickets = false

存取受保護目錄時的存取日誌(注意兩個單獨的 401)

192.168.10.115 - - [24/Aug/2012:15:52:01 +1000] "GET /kerberos/ HTTP/1.1" 401 710 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.83 Safari/537.1"
192.168.10.115 - - [24/Aug/2012:15:52:06 +1000] "GET /kerberos/ HTTP/1.1" 401 680 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.83 Safari/537.1"
192.168.10.115 - [email protected] [24/Aug/2012:15:52:10 +1000] "GET /kerberos/ HTTP/1.1" 200 375 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.83 Safari/537.1"

error.log 中的一行

[Fri Aug 24 15:52:06 2012] [error] [client 192.168.0.115] gss_accept_sec_context(2) failed: An unsupported mechanism was requested (, Unknown error)

答案1

我不知道您是否還需要答案,但我希望透過分享我的經驗對其他人有所幫助。我相信,如果您遵循這些步驟,一切都會順利進行。

  1. 確保您有正確的 DNS 項目SYD01TBUG02您的 DNS 伺服器上的(一筆記錄)指向您的網路伺服器
  2. 確保您的 Web 服務的 SPN 和 AD 使用者之間存在關聯。在 AD 伺服器上執行以下命令:

    setspn -A HTTP/SYD01TBUG02.onevue.com.au.local ad_username

  3. 確保您已產生正確的密鑰表。在 AD 伺服器中執行以下命令:

    ktpass -princ HTTP/[email protected] -mapuser ad_username -pass xxxxxx -crypto ALL -ptype KRB5_NT_PRINCIPAL -out SYD01TBUG02.keytab -setupn -setpass

    其中 xxxxxx 是 AD 使用者密碼。我們用-加密全部選項以確保我們將所有支援的雜湊添加到密鑰表檔案中。
  4. 現在你應該複製生成的SYD01TBUG02.keytab檔案到您的網頁伺服器並將其複製到特定目錄。例如,我們將其複製到/etc/apache2/keytab/資料夾。
  5. Web 服務的 apache 設定檔範例:
    <VirtualHost *:80>
        DocumentRoot "/var/www/kerberos"
        ServerName SYD01TBUG02.onevue.com.au.local
        ServerAlias SYD01TBUG02
        AddDefaultCharset UTF-8
        DirectoryIndex index.php
        ErrorLog /var/log/apache2/error_SYD01TBUG02.log
        TransferLog /var/log/apache2/transfer_SYD01TBUG02.log
        LogLevel warn
        ServerAdmin [email protected]
        
        <Location "/">
            AuthType Kerberos
            KrbAuthRealms ONEVUE.COM.AU.LOCAL
            KrbServiceName HTTP/[email protected]
            Krb5Keytab /etc/apache2/keytab/SYD01TBUG02.keytab
            KrbMethodNegotiate on
            KrbMethodK5Passwd on
            KrbVerifyKDC on
            require valid-user    
        </Location>
        <Directory />
        </Directory>
    </VirtualHost> 
    
  6. 重新載入或重新啟動apachesudo service apache2 reload
  7. 現在,如果您在瀏覽器網址列中輸入 http://SYD01TBUG02/,您將透過 SSO 自動登入您的 Web 服務(Chrome、類似 Chromium 的瀏覽器和 IE 開箱即用地支援 SSO,但還有一個火狐瀏覽器插件)。

希望這將有助於在網頁伺服器上設定 Kerberos 身份驗證。

聚苯乙烯如果您想透過完整位址啟用 SSO(例如SYD01TBUG02.onevue.com.au.local)你應該添加SYD01TBUG02.onevue.com.au.local透過 AD 群組原則(如果需要在網域中的多台電腦上使用)或透過 Internet Explorer 設定本地到 Intranet 區域。這些設定會影響系統中安裝的所有瀏覽器。

答案2

這是因為使用者第一次輸入 u/p 時,ntlm 令牌會傳送到伺服器。第二次是正確的 kerberos 令牌。

不幸的是,您無法消除第一個提示。

答案3

如果不需要單一登錄,您可以透過設定「KrbMethodNegotiate off」來停用協商。這將為您提供一次基本登錄,並避免每筆交易的額外 GET 請求。

相關內容