Использование файла 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.