mod_auth_kerb を使用する Apache は常にパスワードを 2 回要求します

mod_auth_kerb を使用する Apache は常にパスワードを 2 回要求します

(Debian スクイーズ)

AD ユーザーがログインできるように Kerberos 認証を使用するように Apache を設定しようとしています。動作はしていますが、ユーザー名とパスワードの入力をユーザーに 2 回要求し、最初のプロンプトは無視されます (何を入力しても無視されます)。2 回目のプロンプトにのみ、構成からの AuthName 文字列が含まれます (つまり、最初のウィンドウは一般的なユーザー名/パスワードで、2 番目にはタイトル「Kerberos ログイン」が含まれます)。この段階では統合 Windows 認証が機能するかどうかは心配していません。ユーザーが AD アカウントでログインできるようにしたいだけなので、ユーザー アカウントの 2 番目のリポジトリを設定する必要はありません。

最初の無駄なプロンプトを削除するには、どうすれば修正できますか?

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

保護されたディレクトリにアクセスしたときのアクセス ログ (2 つの別々の 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に1行

[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(Aレコード) DNSサーバー上のWebサーバーを指す
  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.キータブファイルをウェブサーバーにコピーし、特定のディレクトリにコピーします。たとえば、/etc/apache2/キータブ/フォルダ。
  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. Apacheをリロードまたは再起動するsudo service apache2 reload
  7. ブラウザのアドレスバーにhttp://SYD01TBUG02/と入力すると、SSO経由でWebサービスに自動的にログインします(Chrome、Chromiumのようなブラウザ、IEはSSOを標準でサポートしていますが、Firefox用プラグイン)。

これが Web サーバー上で Kerberos 認証を設定するのに役立つことを願っています。

追伸完全なアドレスでSSOを有効にする場合(例:SYD01TBUG02.onevue.com.au.ローカル)を追加する必要がありますSYD01TBUG02.onevue.com.au.ローカルAD グループ ポリシー (ドメイン内の複数のマシンで必要な場合) またはローカルの Internet Explorer 設定を介してイントラネット ゾーンに追加します。これらの設定は、システムにインストールされているすべてのブラウザーに影響します。

答え2

これは、ユーザーが最初に u/p を入力するときに、ntlm トークンがサーバーに送信されるからです。2 回目は正しい Kerberos トークンです。

残念ながら、最初のプロンプトを削除する方法はありません。

答え3

シングル サインオンが必須でない場合は、「KrbMethodNegotiate off」を設定してネゴシエートを無効にすることができます。これにより、基本的なログインが 1 回だけになり、トランザクションごとに追加の GET 要求が回避されます。

関連情報