merlin-vrn
@merlin-vrn

Не работает WWW-Authenticate: Negotiate (для Kerberos SSO) в Firefox?

В связи с планами перевести вообще всё на SSO, постепенно отлаживаю вопросы, с этим связанные. Важным вопросом является работа с корпоративными http(s)-ресурсами.


Тестовая конфигурация такая:

на обеих машинах Gentoo Linux, world пересобран с USE="kerberos", библиотека Kerberos — mit-krb5-1.9.4-r1

веб-сервер — Apache 2.2.23, mod_auth_kerb 5.3

браузер — Firefox 10.0.5 (ESR)

KDC — MIT, на той же машине, что и веб-сервер.


Пользователь успешно получает TGT с помощью kinit на обеих машинах. Везде правильно работает kadmin. Другие сервисы, использующие Kerberos (например, ssh, nfs4) работают, при этом на клиентской стороне в тикет-кэше появляются, как положено, их сервис-тикеты.


(все доменные имена ниже являются вымышленными)


.htaccess следующий:
AuthType Kerberos
AuthName "Kerberos Login"
KrbAuthRealms MYDOMAIN.SMTH.RU
require valid-user
KrbServiceName http
Krb5Keytab /etc/apache2/krb5.keytab
KrbMethodK5Passwd off
KrbSaveCredentials on



На клиенте в about:config сделаны следующие настройки:

(по умолчанию)

network.negotiate-auth.allow-proxies = (boolean) true

network.negotiate-auth.delegation-uris = (string) ""

network.negotiate-auth.gsslib = (string) ""

network.negotiate-auth.using-native-gsslib = (boolean) true


(установлено пользователем)

network.negotiate-auth.trusted-uris = (string)


В последнем параметре пробовал следующие варианты:
http://www.mydomain.smth.ru/, www.mydomain.smth.ru, mydomain.smth.ru, srv.mydomain.smth.ru


(в DNS-зоне mydomain.smth.ru есть запись www CNAME srv)


Если включить KrbMethodK5Passwd on в .htaccess, то происходит обычная Basic-аутентификация, т.е. логин-пароль банально отсылаются на сервер открытым текстом. Там он уже, судя по логу KDC, получает все тикеты (пользовательский, а пользователь потом — сервисный). Короче, работает, но главная задача — SSO и безопасность (не пересылать пароль по сети) — не решена.


Кстати, почему-то хотя обращаюсь я к www.mydomain.smth.ru, в keytab пришлось добавить service principal именно http/srv.mydomain.smth.ru@MYDOMAIN.SMTH.RU; видимо, это из-за www CNAME srv в DNS-зоне.


Если KrbMethodK5Passwd off, ничего не происходит. Общение сервера с клиентом выглядит так (.htaccess находится в krb5):

GET /krb5/phpinfo.php HTTP/1.1
Host: www.mydomain.smth.ru
User-Agent: Mozilla/5.0 (X11; Linux i686; rv:10.0.5) Gecko/20100101 Firefox/10.0.5
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Connection: keep-alive
Cache-Control: max-age=0

HTTP/1.1 401 Authorization Required
Date: Sat, 19 Jan 2013 09:21:52 GMT
Server: Apache
WWW-Authenticate: Negotiate
Content-Length: 470
Keep-Alive: timeout=15, max=99
Connection: Keep-Alive
Content-Type: text/html; charset=iso-8859-1

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>401 Authorization Required</title>
</head><body>
<h1>Authorization Required</h1>
<p>This server could not verify that you
are authorized to access the document
requested. Either you supplied the wrong
credentials (e.g., bad password), or your
browser doesn't understand how to supply
the credentials required.</p>
<hr>
<address>Apache Server at www.mydomain.smth.ru Port 80</address>
</body></html>


И дальше Fx показывает эту страницу, не пытаясь взаимодействовать дальше.


TGT есть, вывод klist:

Ticket cache: FILE:/tmp/krb5cc_1001
Default principal: user@MYDOMAIN.SMTH.RU

Valid starting Expires Service principal
01/19/13 10:21:28 01/20/13 10:21:28 krbtgt/MYDOMAIN.SMTH.RU@MYDOMAIN.SMTH.RU
renew until 01/19/13 10:21:28



Вопрос: как заставить Fx всё-таки использовать Negotiate auth?
  • Вопрос задан
  • 9219 просмотров
Решения вопроса 1
merlin-vrn
@merlin-vrn Автор вопроса
В логах KDC обнаружил, что клиент пытается получить тикет для HTTP/srv.mydomain.smth.ru, т.е. CNAME хоста, а имя сервиса — HTTP. Информацию о том, какого сервиса ловить, сервер клиенту не предоставляет, используется well known, в данном случае HTTP.

Сделал такого принципла, выгрузил его в keytab, убрал KrbServiceName http — всё заработало.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
giner
@giner
Обычно достаточно лишь добавить smth.ru в network.negotiate-auth.trusted-uris.
Остальные настройки не меняю.
Ответ написан
giner
@giner
И ещё: kerberos очень чувствителен к DNS записям, как к прямым, так и обратным.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы