Эта учетная запись является частью того, что определяет удостоверение сервера в Kerberos.
Kerberos — это протокол с симметричным ключом. У каждого пользователя есть симметричный ключ, который используется совместно пользователем и KDC, и аналогичным образом каждая служба (акцептор) имеет симметричный ключ, который используется совместно службой и KDC.
Когда пользователь запрашивает билеты для определенного субъекта-службы, KDC возвращает их в зашифрованном виде с использованием ключа этой службы. Таким образом, чтобы служба могла расшифровать эти билеты Kerberos, ей также необходимо каким-то образом узнать ключ, связанный с ее собственным субъектом-службой.
Часто служебный ключ генерируется случайным образом и предоставляется через файл keytab. Однако в системах Active Directory большинство учетных записей служб являются обычными учетными записями пользователей, у которых есть пароль, поэтому вместо этого их ключ может быть получен из пароля службы.
Похоже, что ваш модуль SPNEGO поддерживает оба метода (см. строки 150-160) - ему можно указать keytab или пароль.
В любом случае этот параметр не имеет абсолютно никакого отношения к клиентам, которые будут подключаться к вашей службе. Он только устанавливает собственную идентичность сервера.
Каково точное использование имени участника-службы в сценарии Kerberos?
Это похоже на поле доменного имени в сертификатах HTTPS. Например, когда браузер выполняет аутентификацию Kerberos для https://example.com
, он всегда будет запрашивать билет Kerberos для SPN HTTP/example.com
из KDC.
Если вы знакомы с OAuth2, SAML или JWT, я полагаю, что имя участника-службы Kerberos будет грубым эквивалентом поля аудитории в утверждениях SAML или поля aud в JWT.
(Обратите внимание, что браузер только знает вашу службу по ее имени участника-службы и не заботится о фактических учетных записях службы, которые используются за кулисами — например, Active Directory сопоставляет имена участников-служб с реальными учетными записями пользователей в этом случай, но другие реализации Kerberos делают это по-другому)
Должен ли я использовать одного и того же пользователя в командах web.xml и setspn?
Да, это должен быть один и тот же пользователь, поскольку служба должна иметь возможность расшифровывать билеты, выданные для ее SPN, поэтому ей необходимо знать тот же симметричный ключ.
И какого пользователя выбрать?
Создайте новую специальную учетную запись только для этой службы. Не используйте учетную запись реального человека.
Используйте длинный, очень случайный пароль и пометьте его как бессрочный. Кроме того, убедитесь, что обе учетные записи поддерживают xxx-битные функции Kerberos AES в параметрах учетной записи (при условии, что ваша штука Java SPNEGO поддерживает AES, что должно быть).
Должен ли я выполнять команду setspn на каждом компьютере с Windows или есть способ сделать это только один раз?
Нет, не имеет значения, где вы его выполняете, потому что он редактирует только реальную учетную запись на контроллерах домена и не оставляет никаких следов на локальном компьютере. (В частности, он устанавливает атрибут servicePrincipalName
LDAP для предоставленной учетной записи.)
Клиенты узнают вашу службу только по ее имени участника-службы, и им не нужно знать о сопоставлении учетных записей, которое выполняется KDC за кулисами.
person
user1686
schedule
09.04.2021