Использование файла keytab с расширением Spring Security Kerberos

Моя цель: внедрить SSO в веб-приложении на основе Java. Моя проблема: я не охранник...

После некоторого исследования я обнаружил, что мне нужно расширение Kerberos для Spring Security (также изучил apache shiro, но смог найти только пример со страницей входа).

Я использовал образцы в следующем проекте: https://github.com/spring-projects/spring-security-kerberos/tree/master/spring-security-kerberos-sample

Я понял, что мне нужно создать keytab. Когда я попытался использовать keytab, я получил следующую ошибку:

javax.security.auth.login.LoginException: Unable to obtain password from user

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

Поэтому я решил проверить мой keytab и посмотреть, все ли в порядке. Во-первых, это последняя команда (после долгой эволюции), которую я использовал для создания моей таблицы ключей:

ktpass /out http-web.keytab /mapuser MyUser@MYDOMAIN.COM /princ HTTP/MyUser@MYDOMAIN.COM /pass MyPass /ptype KRB5_NT_PRINCIPAL

Конечно, я создал SPN для MyUser с помощью следующей команды:

setspn -a HTTP/MyUser@MYDOMAIN.COM MYDOMAIN.COM\MyUser

Я проверил spn со следующим:

setspn -Q HTTP/MyUser@MYDOMAIN.COM

И получил успешный результат:

Checking domain DC=mydomain,DC=com CN=MyUser,OU=MyOrg,DC=mydomain,DC=com
    HTTP/MyUser
    HTTP/MyUser@MYDOMAIN.COM

Существующий SPN найден!

Теперь я хотел проверить, могу ли я получить билет для MyUser, выполнив следующую команду:

kinit MyUser@MYDOMAIN.COM

Я получил успешный результат ("новый тикет хранится в кеш-файле....")

Теперь я хотел проверить это с помощью моей keytab:

kinit MyUser@MYDOMAIN.COM -k -t http-web.keytab

Получил следующее исключение:

Exception: krb_error 0 Do not have keys of types listed in default_tkt_enctypes available; only have keys of following type:  No error KrbException: Do not have keys of types listed in default_tkt_enctypes available; only have keys of following type:

Я использовал инструмент klist, чтобы увидеть, содержит ли моя таблица ключей какие-либо ключи:

klist -e -K -k -t  http-web.keytab

Получил следующий результат:

KVNO: 8
Key type: 23
Key: 0x47bf8039a8506cd67c524a03ff84ba4e
Time stamp: Jan 01, 1970 02:00

В качестве последней отчаянной попытки я проверил следующие параметры учетной записи для MyUser:

  • Используйте Kerberos DES типы шифрования для этой учетной записи
  • Учетная запись поддерживает 128-битное шифрование Kerberos AES
  • Учетная запись поддерживает 256-битное шифрование Kerberos AES

Я не уверен, что это вызвано настройкой этих параметров, но теперь, когда я запускаю

kinit MyUser@MYDOMAIN.COM

Я получаю следующую ошибку:

Exception: krb_error 14 KDC has no support for encryption type (14) KDC has no support for encryption type
KrbException: KDC has no support for encryption type (14)

Так что я немного отчаялся здесь, я действительно не знаю, что я делаю. Это все вопрос проб и ошибок (в основном ошибки). Если кто-нибудь и проведет меня через это, я буду очень признателен.

Спасибо Лиор

1 ответ

Решение

Оказалось глупой ошибкой. Весной я ввел учетную запись пользователя вместо основного имени в качестве servicePrincipal.

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