gss_acquire_cred возвращает ошибку «Запись таблицы ключей не найдена»
-
02-07-2019 - |
Вопрос
Я стараюсь следовать рекомендациям, изложенным в эта статья Microsoft Проверка подлинности против Apache с помощью Kerberos и AD.Я успешно протестировал связь между сервером Apache и сервером AD с помощью kinit.Однако когда я пытаюсь получить доступ к странице с ограниченным доступом на сервере с помощью IE, я получаю внутреннюю ошибку сервера, и в журнале ошибок Apache появляется следующее сообщение.
[Wed Sep 24 14:18:15 2008] [debug] src/mod_auth_kerb.c(1483): [client 172.31.37.38] kerb_authenticate_user entered with user (NULL) and auth_type Kerberos
[Wed Sep 24 14:18:15 2008] [debug] src/mod_auth_kerb.c(1174): [client 172.31.37.38] Acquiring creds for HTTP/srvnfssol1.dev.local@DEV.LOCAL
[Wed Sep 24 14:18:15 2008] [error] [client 172.31.37.38] gss_acquire_cred() failed: Miscellaneous failure (see text) (Key table entry not found)
Я запустил ферму в процессе Apache и подтвердил, что файл keytab действительно загружается нормально.Мне интересно, что-то не так с форматом файла keytab...
HTTP/srvnfssol1.dev.local@DEV.LOCAL
Хотя я не уверен, чего мне не хватает.Или что еще проверить.
Какие-либо предложения?
Спасибо
Питер
Решение
Хорошо.Вкладки ключей должны содержать имя участника службы, в данном случае «HTTP/srvnfssol1.dev.local@DEV.LOCAL», и ключ шифрования.Я вижу, что в документах MS говорится просто отразить это в файле, но я не думаю, что это правильно.
Для создания таблицы ключей вам понадобится утилита ktpass.Документы MS здесь.
В частности, вам нужно будет указать KRB5_NT_SRV_HST
, а большинство остальных параметров могут быть заданы по умолчанию.
Пример на моей машине:
C:\>ktpass /out test.keytab /princ HTTP/srvnfssol1.dev.local@DEV.LOCAL
/ptype KRB5_NT_SRV_HST /pass *
Type the password for HTTP/srvnfssol1.dev.local:
Key created.
Output keytab to test.keytab:
Keytab version: 0x502
keysize 62 HTTP/srvnfssol1.dev.local@DEV.LOCAL
ptype 3 (KRB5_NT_SRV_HST) vno 1 etype 0x1 (DES-CBC-CRC)
keylength 8 (0xa7f1fb38041c199e)
Если сервером активных каталогов является KDC, вам нужно будет использовать /map <name>
аргумент, где <name>
— это учетная запись компьютера в активном каталоге, представляющая сервер.
Немного подробностей о том, как все это работает.Когда вы заходите на сайт, он должен ответить WWW-аутентификацией:Согласуйте заголовок, и ваш браузер отправит запрос на KDC (сервер активных каталогов), чтобы получить билет Kerberos для службы.Сервер AD найдет ключ шифрования билета, используя имя субъекта службы, и отправит зашифрованный билет службы обратно в браузер.Как только браузер получит билет службы, он повторно отправит HTTP-запрос с заголовком аутентификации, содержащим билет.Сервер Apache найдет свой ключ на вкладке ключей, расшифрует билет и предоставит доступ.
Ошибка «Запись таблицы ключей не найдена» возникает из-за того, что Apache не находит себя в вкладке ключей.Это также может произойти, если разрешение имени/области настроены неправильно.
Вы сможете увидеть все запросы Kerberos AP-REQ/AP-REP/TGS-REQ/TGS-REP с помощью Wireshark на клиенте, порте TCP или UDP 88.