3

mod_auth_kerb を使用して、W2008 サーバーで実行されている AD サーバーに対してユーザーを自動的に Web サイトにログインさせようとしています。ユーザーは既に Windows ネットワークにログインしており、Web サイトにアクセスしています。

私の仮想サーバーのconfは次のとおりです。

<Location />
        Order allow,deny
        Satisfy Any
        AuthType Kerberos
        AuthName "Kerberos Login ORN"
        KrbMethodNegotiate On
        KrbMethodK5Passwd Off
        KrbServiceName Any
        KrbAuthRealms EXAMPLE.ES
        Krb5KeyTab /etc/krb5.keytab
        require valid-user
</Location>

Apache から kinit 経由でログインに成功しました。

kinit -t /etc/HTTP-hesl035.keytab
Password for HTTP-hesl035@EXAMPLE.ES:

klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: HTTP-hesl035@EXAMPLE.ES

Valid starting     Expires            Service principal
11/07/13 17:55:46  11/08/13 03:55:51  krbtgt/EXAMPLE.ES@EXAMPLE.ES
        renew until 11/08/13 03:55:46

また

kinit HTTP-hesl035
Password for HTTP-hesl035@EXAMPLE.ES:

klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: HTTP-hesl035@EXAMPLE.ES

Valid starting     Expires            Service principal
11/07/13 17:57:26  11/08/13 03:57:26  krbtgt/EXAMPLE.ES@EXAMPLE.ES
        renew until 11/08/13 03:57:26

次の設定でFirefoxを構成します。

network.negotiate-auth.delegation.uris = testing.example.es
network.negotiate-auth.trusted.uris = testing.example.es

サイトにアクセスすると、認証が必要です。

ブラウザから送信される最初のヘッダーは次のとおりです。

GET Host: testing.example.es

サーバーによる最初のヘッダー応答は次のとおりです。

401 Authorization required
WWW-authenticate: Negotiate

ブラウザから送信される 2 番目のヘッダーは次のとおりです。

GET Host: testing.example.es
Authentication: Negotiate {TOKEN}

サーバーから送信される 2 番目のヘッダーは次のとおりです。

401 Athorization required

次のようなApacheログ:

Thu Nov 07 18:06:09 2013] [debug] src/mod_auth_kerb.c(1939): [client 192.168.4.16] kerb_authenticate_user entered with user (NULL) and auth_type Kerberos
[Thu Nov 07 18:06:09 2013] [debug] src/mod_auth_kerb.c(1939): [client 192.168.4.16] kerb_authenticate_user entered with user (NULL) and auth_type Kerberos
[Thu Nov 07 18:06:09 2013] [debug] src/mod_auth_kerb.c(1691): [client 192.168.4.16] Verifying client data using KRB5 GSS-API
[Thu Nov 07 18:06:09 2013] [debug] src/mod_auth_kerb.c(1707): [client 192.168.4.16] Client didn't delegate us their credential
[Thu Nov 07 18:06:09 2013] [debug] src/mod_auth_kerb.c(1735): [client 192.168.4.16] Warning: received token seems to be NTLM, which isn't supported by the Kerberos module. Check your IE configuration.
[Thu Nov 07 18:06:09 2013] [debug] src/mod_auth_kerb.c(1138): [client 192.168.4.16] GSS-API major_status:00010000, minor_status:00000000
[Thu Nov 07 18:06:09 2013] [error] [client 192.168.4.16] gss_accept_sec_context() failed: An unsupported mechanism was requested (, Unknown error)

ユーザーの Windows マシンで krbtray.exe を使用すると、次のチケットが表示されます。

EXAMPLE.ES
- host/minit-bn-example.es
- krbtgt/EXAMPLE.ES

Apache アプリにアクセスすると、krbtgt/EXAMPLE.ES が表示されます。

クライアントが kerberos チケットを送信しているようですが、確かではありません。誰もがこの問題について知っていますか??

編集:

Apache conf で KrbMethodK5Passwd を On に設定すると、Web アプリにアクセスするときにユーザー/パス フォームのポップアップが表示されます。しかし、ユーザー資格情報でログインできません。

Apache ログには次のように記載されています。

[Thu Nov 07 17:41:34 2013] [debug] src/mod_auth_kerb.c(1939): [client 192.168.4.16] kerb_authenticate_user entered with user (NULL) and auth_type Kerberos
[Thu Nov 07 17:41:34 2013] [error] [client 192.168.4.16] Error parsing server name (Any): Hostname cannot be canonicalized
[Thu Nov 07 17:41:34 2013] [debug] src/mod_auth_kerb.c(1110): [client 192.168.4.16] kerb_authenticate_user_krb5pwd ret=401 user=(NULL) authtype=(NULL)

Windows クライアントで Wireshark を使用してパケットを取得すると、AD から Windows クライアントに 2 つの kerberos エラーが発生します。

KRB Error: KRB5KRB_ERR_RESPONSE_TOO_BIG
KRB Error: KRB5KDC_ERR_S_PRINCIPAL_UNKNOWN
4

1 に答える 1

1

KRB5KDC_ERR_S_PRINCIPAL_UNKNOWN エラーは、AD サーバーで ktpass.exe を使用して生成されたマップ ファイルが正しくないことが原因です。

次のように、ktpass.exe を使用して正しいマップ ファイルを生成します。

ktpass -princ HTTP/example.es@EXAMPLE.ES -mapuser username\HTTP-hesl035 -crypto ALL -ptype KRB5_NT_PRINCIPAL -mapop set -pass password -out c:\tem
p\krb5.keytab

AD サーバーで setspn.exe を使用してユーザーに SPN を割り当てます。

setspn -s HTTP/example.es HTTP-hesl035
  • HTTP-hesl035 は、AD で作成された Apache サーバーのユーザー名です。
于 2013-11-22T10:54:16.637 に答える