У меня есть веб-сайт, работающий на компьютере Linux с использованием Apache. Я использовал mod_auth_kerb для проверки подлинности Kerberos с единым входом на сервере Windows Active Directory.
Для правильной работы Kerberos я создал учетную запись службы в Active Directory под названием dummy
.
Я создал keytab для веб-сервера Linux с помощью ktpass.exe на сервере Windows AD с помощью этой команды:
ktpass /out C:\krb5.keytab /princ HTTP/example.com@REALM.EXAMPLE.COM /mapuser dummy@REALM.EXAMPLE.COM /crypto RC4-HMAC-NT /ptype KRB5_NT_PRINCIPAL /pass xxxxxxxxx
Я могу успешно получить билет с веб-сервера Linux с помощью этой команды:
kinit -k -t /path/to/keytab HTTP/example.com@REALM.EXAMPLE.COM
... и просмотрите билет с помощью klist
.
Я также настроил свой веб-сервер со следующими свойствами Kerberos:
<Directory />
AuthType Kerberos
AuthName "Example.com Kerberos domain"
KrbMethodK5Passwd Off
KrbAuthRealms EXAMPLE.COM
KrbServiceName HTTP/example.com@REALM.EXAMPLE.COM
Krb5KeyTab /path/to/keytab
Require valid-user
SSLRequireSSL
<Files wsgi.py>
Order deny,allow
Allow from all
</Files>
</Directory>
Однако, когда я пытаюсь войти на веб-сайт (с другого рабочего стола с именем пользователя "Jeff"), мои учетные данные Kerberos не принимаются автоматически веб-сервером. Он должен предоставить мне доступ сразу после этого, но это не так. Единственная информация, которую я получаю из журналов mod_auth_kerb:
kerb_authenticate_user entered with user (NULL) and auth_type Kerberos
Однако дополнительная информация открывается, когда я изменяю настройку mod_auth_kerb. KrbMethodK5Passwd
к On
:
[Fri Oct 18 17:26:44 2013] [debug] src/mod_auth_kerb.c(1939): [client xxx.xxx.xxx.xxx] kerb_authenticate_user entered with user (NULL) and auth_type Kerberos
[Fri Oct 18 17:26:44 2013] [debug] src/mod_auth_kerb.c(1031): [client xxx.xxx.xxx.xxx] Using HTTP/example.com@REALM.EXAMPLE.COM as server principal for password verification
[Fri Oct 18 17:26:44 2013] [debug] src/mod_auth_kerb.c(735): [client xxx.xxx.xxx.xxx] Trying to get TGT for user jeff@REALM.EXAMPLE.COM
[Fri Oct 18 17:26:44 2013] [debug] src/mod_auth_kerb.c(645): [client xxx.xxx.xxx.xxx] Trying to verify authenticity of KDC using principal HTTP/example.com@REALM.EXAMPLE.COM
[Fri Oct 18 17:26:44 2013] [debug] src/mod_auth_kerb.c(1110): [client xxx.xxx.xxx.xxx] kerb_authenticate_user_krb5pwd ret=0 user=jeff@REALM.EXAMPLE.COM authtype=Basic
Что мне не хватает? Я изучил множество онлайн-руководств и не могу найти причину, по которой учетные данные Kerberos не разрешают доступ.
Изучив гораздо больше информации журнала, я обнаружил, что клиентский компьютер не отвечает должным образом на билет сервера. Вы можете сказать, что что-то не так на клиентском компьютере, увидев сообщение об ошибке сервера Apache "не удалось проверить учетные данные krb5: Сервер не найден в базе данных Kerberos". В /etc/krb5.conf
файл на клиентском компьютере, вы должны убедиться, что имя веб-домена соответствует правильной области Kerberos:
[domain_realm]
example.com = REALM.EXAMPLE.COM
.example.com = REALM.EXAMPLE.COM
Без этого клиент отклонит сервер, потому что Билеты Kerberos могут поступать только из явно разрешенных областей.
Я надеюсь, что эта информация поможет другим!