GSSAPI - функциональная совместимость Windows Active Directory - контекст принятия ошибки: неверный принципал в запросе
Мы пишем программное обеспечение для Windows и Linux и планируем использовать Windows Active Directory для аутентификации. Я борюсь с проблемами, описанными ниже, и буду признателен за любую помощь:
Доменное имя: CORP.COMPANY.COM
Тестовое программирование на одном компьютере с Linux: host1.corp.company.com
Тестовая программа взята из gss-sample из загруженных файлов krb5-1.11.3.
Сервер будет называться "gssapitest".
Основываясь на "Пошаговом руководстве по взаимодействию Kerberos 5(krb5 1.0) (от Microsoft),
Сначала создайте в AD пользователя "host1" для представления хоста host1.corp.company.com (машина linux).
Используйте ktpass для генерации ключевой таблицы (запускается из Windows): ktpass /princ host/host1.corp.company.com@CORP.COMPANY.COM /mapuser host1 /pass hostpassword /out file1.keytab
Теперь в AD создайте другого пользователя домена "gssapitest" для представления программы тестового сервера и сопоставьте пользователя аналогичным образом: ktpass /princ gssapitest/host1.corp.company.com@CORP.COMPANY.COM /mapuser gssapitest /pass gssapitestpassword /out file2.keytab
скопируйте file1.keytab и file2.keytab на компьютер Linux host1 и объедините их в /etc/krb5.keytab.
В Linux "ktutil" показывает содержимое /etc/krb5.keytab следующим образом:
слот КВНО Принципал 1 4 host/host1.corp.company.com@CORP.COMPANY.COM 2 5 gssapitest/host1.corp.company.com@CORP.COMPANY.COM
В Windows зарегистрируйте службу (используя "setspn") для программы сервера Linux, чтобы результат был похож (2 записи, одна с отображенным именем хоста, другая с фактическим именем хоста, для целей тестирования. Если только одна запись, нет Неважно, какой, результат был тот же)
Зарегистрированные ServicePrincipalNames для CN=xxxx,CN= Пользователи,DC= Корпорация,DC= Компания,DC=com: gssapitest/host1:2001 gssapitest/host1.corp.company.com:2001
Теперь я запускаю сервер так:
gss-server -port 2001 gssapitest
и запустить клиент из другого терминала следующим образом:
gss-client -port 2001 -пользователь xxxx -pass xxxxpassword host1.corp.company.com gssapitest "abcd"
Ошибка показывает на стороне сервера:
Контекст принятия ошибки GSS-API: Неуказанный сбой GSS. Незначительный код может предоставить больше информации контекст принятия ошибки GSS-API: Неправильный принципал в запросе
Что может быть вероятной причиной этого? Я хотел бы знать, если шаг, который я обрисовал в общих чертах, все необходим. и какие из них не нужны вообще или неверны.
(Примечание: я попытался войти в Linux с учетной записью локального пользователя и учетной записью домена в CORP.COMPANY.COM, результат показывает ту же ошибку. Также nslookup показывает правильный IP-адрес для сопоставления хоста для машины linux),
2 ответа
Я провел несколько тестовых прогонов, и в моем случае проблема, по-видимому, заключается в следующем: я внес изменения в своего сопоставленного пользователя, то есть в gssapitest (в разделе "Пользователи и компьютеры Active Directory" я снял флажок "Использовать типы шифрования DES для этой учетной записи"). на вкладке "Учетная запись" для этого пользователя) после запуска "ktpass" и объединения выходного файла с krb5.keytab на компьютере с Linux. Чтобы решить эту проблему, я снова проверил "Использовать типы шифрования DES для этой учетной записи" изнутри Active Directory, затем зашел на компьютер с Linux, запустил "kdestroy" перед запуском моего сервера и клиентских программ. Тогда это сработало. Если у кого-то есть подобные проблемы, вы можете рассмотреть эту возможную причину. Благодарю.
Я бы не стал указывать номер порта при использовании setspn; Я ожидаю, что gssapitest не gssapitest:2001. Кроме того, используйте gssapitest@host в качестве имени службы при вызове gss-client;
gss-client -user xxx -pass xxx -port 2001 hostname gssapitest@hostname "test message"
Вы можете использовать трассировку krb5, чтобы лучше вести журнал о происходящем:
export KRB5_TRACE=/tmp/trace.client # and run client
Похоже на сервер.