Я пытаюсь настроить keytab для сервера Java для поддержки аутентификации Kerberos в сети Windows. Я изо всех сил пытаюсь заставить его работать даже на уровне инструментов командной строки, я еще даже не дошел до настройки сервера! Мой план сейчас - попытаться заставить его работать на моем компьютере для разработки, так как у меня есть работа по разработке и отладке. Итак, моя цель - запустить Java-сервер на моем ПК, а клиент, работающий на том же компьютере, подключиться к нему.
Вот что я сделал до сих пор, я действительно ошибаюсь, поэтому я мог делать самые разные вещи!
Я попросил одного из наших администраторов домена выполнить эту команду:
setspn -A TEST/pc-name.mydomain.com my-user-name
Кажется, это завершилось успешно, и я могу успешно перечислить это SPN с помощью
setspn -L my-user-name
Я создал keytab с помощью этой команды:
ktpass /princ TEST/pc-name.mydomain.com@MYDOMAIN.COM /pass <my-password> /ptype KRB5_NT_SRV_HST /out <keytab-filename>
Кажется, что это успешно создает keytab, хотя предупреждает, что ptype и тип учетной записи не совпадают (но что бы я ни выбрал для ptype, я получаю такое же предупреждение). Если я запустил эту команду:
klist -k file:/<keytab-filename>
Затем он перечисляет SPN, которое я ожидал, а именно TEST/pc-name.mydomain.com@MYDOMAIN.COM
Теперь я хочу проверить, работает ли keytab для этого SPN, поэтому я запускаю
kinit -t <keytab-filename> TEST/pc-name.mydomain.com@MYDOMAIN.COM
Затем я получаю сообщение об ошибке «Клиент krb_error 6 не найден в базе данных Kerberos».
Что я делаю не так?
Я не совсем уверен, относится ли my-user-name к объекту компьютера или объекту пользователя в активном каталоге; Я предполагаю, что это пользовательский объект. В этом случае я считаю, что setspn не подходит; это предназначено для изменения имен участников-служб существующих учетных записей компьютеров. Что касается учетной записи пользователя, я скептически отношусь к правоте SRV_HST.
Очевидно, поддержка SPN, связанных с пользовательскими объектами, несколько ограничена; Я где-то читал, что это действительно только для одного пользователя. Мне также не удалось заставить ваш вызов ktpass работать на меня, поскольку он настаивал на а) указании учетной записи пользователя (через mapuser), которая должна быть связана с SPN, и б) установке пароля SPN. Думаю, последнее неизбежно при создании keytab через ktpass.
Мне удалось создать keytab «стандартным способом», то есть настроив выделенную учетную запись пользователя и связав ее с SPN:
ktpass /princ TEST/host@DOMAIN /mapuser user@DOMAIN /pass * /out foo.keytab /ptype KRB5_NT_PRINCIPAL
Эта операция (ожидаемо) нарушила логин для пользователя, однако затем я смог kinit с
kinit -k -t /tmp/foo.keytab TEST/host@DOMAIN