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.