Kerberos SSO с mod_auth_kerb: проверочный код 589824 и токен, похоже, NTLM

Я столкнулся с некоторыми трудностями, керберизируя хост, tpno. Я следую за http://grolmsnet.de/kerbtut, который работал на других, керберизируя хост, не добавленный в домен Windows.

Похоже, проблема в клиентских токенах NTLM по какой-то причине.

Я пройду настройку и состояние сервера, а затем тестирующего клиента:

сервер

Среда:

ОС CentOS 5.9,

Kerberos, Apache и mod_auth_kerb установлены с yum:

httpd.x86_64                              2.2.3-76.el5.centos          installed
httpd-devel.i386                          2.2.3-76.el5.centos          installed
httpd-devel.x86_64                        2.2.3-76.el5.centos          installed

mod_auth_kerb.x86_64                      5.1-5.el5                    installed

krb5-devel.x86_64                         1.6.1-70.el5                 installed
krb5-libs.i386                            1.6.1-70.el5                 installed
krb5-libs.x86_64                          1.6.1-70.el5                 installed
krb5-workstation.x86_64                   1.6.1-70.el5                 installed
pam_krb5.i386                             2.2.14-22.el5                installed
pam_krb5.x86_64                           2.2.14-22.el5                installed

KDC / DC - это Windows Server 2003 с пакетом обновления 2 (SP2)

Kerberos:

У меня был администратор домена, создающий учетную запись AD и запускающий ktpass, чтобы сопоставить SPN с этой учетной записью:

ktpass.exe /princ HTTP/t.p.no@TESTSONE2.P.LOCAL /mapuser testsone2\user 
/crypto DES-CBC-MD5 +DesOnly /Pass *** /ptype KRB5_NT_PRINCIPAL /out t.keytab

На сервере / хосте, в котором я пытаюсь выполнить керберизацию, я сделал это, чтобы убедиться, что Kerberos настроен правильно:

# kinit -V jhs@TESTSONE2.P.LOCAL
Password for jhs@TESTSONE2.P.LOCAL: 
Authenticated to Kerberos v5

# klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: jhs@TESTSONE2.P.LOCAL

Valid starting     Expires            Service principal
05/13/13 15:32:13  05/14/13 01:32:17  krbtgt/TESTSONE2.P.LOCAL@TESTSONE2.P.LOCAL
  renew until 05/14/13 15:32:13


Kerberos 4 ticket cache: /tmp/tkt0
klist: You have no tickets cached

И я проверил, что KDC отправляет мне билеты для моего директора:

# kvno HTTP/t.p.no@TESTSONE2.P.LOCAL
HTTP/t.p.no@TESTSONE2.P.LOCAL: kvno = 9

# klist -e
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: jhs@TESTSONE2.P.LOCAL

Valid starting     Expires            Service principal
05/13/13 15:32:13  05/14/13 01:32:17  krbtgt/TESTSONE2.P.LOCAL@TESTSONE2.P.LOCAL
  renew until 05/14/13 15:32:13, Etype (skey, tkt): ArcFour with HMAC/md5, ArcFour with HMAC/md5 
05/13/13 15:34:27  05/14/13 01:32:17  HTTP/t.p.no@TESTSONE2.P.LOCAL
  renew until 05/14/13 15:32:13, Etype (skey, tkt): DES cbc mode with CRC-32, DES cbc mode with RSA-MD5 

Kerberos 4 ticket cache: /tmp/tkt0
klist: You have no tickets cached

Kvno совпадает с ключом в таблице ключей:

# ktutil 
ktutil: rkt t.keytab
ktutil: l
slot KVNO Principal
---- ---- ---------------------------------------------------------------------
   1    9 HTTP/t.p.no@TESTSONE2.P.LOCAL

tpno - это A-запись, преобразующаяся в IP-адрес, который обратным образом преобразуется в tpno.

Это моя конфигурация виртуального хоста, это простое приложение для обслуживаемых пассажиров. Проверена работа перед добавлением раздела Location с директивами, связанными с аутентификацией:

<VirtualHost *:80>
  DocumentRoot /home/p/testapp/public
  ServerName t.p.no

  RackEnv staging
  RailsEnv staging

  <Directory /home/p/testapp/public>
    Options -MultiViews
  </Directory>

  <Location />
    AuthType Kerberos
    AuthName "Logg inn"
    KrbMethodNegotiate On
    KrbMethodK5Passwd Off
    KrbAuthRealms TESTSONE2.P.LOCAL
    KrbServiceName HTTP # No difference if using full SPN here
    Krb5KeyTab /etc/httpd/keys/t.keytab
    require valid-user
  </Location>

  LogLevel debug
  CustomLog logs/t.p.no-access_log combined_forwarded
  ErrorLog logs/t.p.no-error_log

</VirtualHost>

Когда клиент вводит tpno в Internet Explorer, Apache регистрирует следующее:

[debug] src/mod_auth_kerb.c(1496): [client 139.x.x.201] kerb_authenticate_user entered with user (NULL) and auth_type Kerberos
[debug] src/mod_auth_kerb.c(1496): [client 139.x.x.201] kerb_authenticate_user entered with user (NULL) and auth_type Kerberos
[debug] src/mod_auth_kerb.c(1151): [client 139.x.x.201] Acquiring creds for HTTP/t.p.no@TESTSONE2.P.LOCAL
[debug] src/mod_auth_kerb.c(1270): [client 139.x.x.201] Verifying client data using KRB5 GSS-API
[debug] src/mod_auth_kerb.c(1286): [client 139.x.x.201] Verification returned code 589824
[debug] src/mod_auth_kerb.c(1313): [client 139.x.x.201] Warning: received token seems to be NTLM, which isn't supported by the Kerberos module. Check your IE configuration.
[error] [client 139.116.152.201] gss_accept_sec_context() failed: Invalid token was supplied (No error)

клиент

ОС: Windows Server 2008 с пакетом обновления 1

В IE включен IWA, и http://t.p.no/ добавлен в список хостов интрасети.

На клиенте, когда я пытаюсь получить доступ к tpno, я вижу два запроса в Fiddler, во-первых, клиент не отправляет заголовки аутентификации, сервер отвечает статусом 401 и заголовком WWW-Authenticate: Negotiate.

Во втором запросе клиент отправляет заголовок: Authorization: Negotiate [token data]. На вкладке Auth в fiddler отображаются данные токена:

-[NTLM Type1: Negotiation]------------------------------
Provider: NTLMSSP
Type: 1
OS Version: 6.1:7601
Flags:  0xe2088297
    Unicode supported in security buffer.
    OEM strings supported in security buffer.
    Request server's authentication realm included in Type2 reply.
    Sign (integrity)
    NTLM authentication.
    Negotiate Always Sign.
    Negotiate NTLM2 Key.
    Supports 56-bit encryption.
    Supports 128-bit encryption.
    Client will provide master key in Type 3 Session Key field.
Domain_Offset: 0; Domain_Length: 0; Domain_Length2: 0
Host_Offset: 0; Host_Length: 0; Host_Length2: 0
Host: 
Domain: 
------------------------------------

Будем весьма благодарны за помощь в выяснении причин, по которым отправляются токены NTLM!

2 ответа

Решение

Как уже упоминалось, мой тестовый клиент - сервер 2008 R2. В статье ( http://support.microsoft.com/kb/977321), относящейся к клиентам Windows 7 и Windows Server 2008 R2, говорится, что шифрование DES для проверки подлинности Kerberos в этих продуктах по умолчанию отключено.

Я выполнил шаги, описанные в статье, чтобы снова включить DES на клиенте, KDC - 2003, поэтому он все еще должен поддерживать DES. Аутентификация прошла успешно.

Ваши пакеты krb5 устарели. они должны быть обновлены для поддержки более надежного шифрования.

DES определенно должен быть отключен. Все мои системы Linux используют 128 AES для Kerberos.

Другие вопросы по тегам