gss_acquire_cred возвращая запись таблицы ключей не найдена - PullRequest
2 голосов
/ 24 сентября 2008

Я пытался следовать инструкциям этой статьи 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

Я не уверен, что мне не хватает, хотя. Или что еще проверить.

Есть предложения?

Спасибо

Питер

1 Ответ

4 голосов
/ 11 июня 2009

Хорошо. Таблицы ключей должны содержать имя участника Сервиса, в данном случае «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-Authenticate: Negotiate, и ваш браузер отправит запрос на KDC (сервер активных каталогов), чтобы получить билет Kerberos для службы. Сервер AD будет искать ключ шифрования для заявки, используя имя участника службы, и отправлять зашифрованный билет службы обратно в браузер. Как только браузер получит билет службы, он снова выдаст HTTP-запрос с заголовком проверки подлинности, содержащим билет. Сервер apache проверит свой ключ в таблице ключей, расшифрует билет и предоставит доступ.

Ошибка «Запись таблицы ключей не найдена» происходит из-за того, что apache не находит себя в таблице ключей. Может также произойти, если разрешение имени / области не настроены правильно.

Вы должны иметь возможность видеть все запросы Kerberos AP-REQ / AP-REP / TGS-REQ / TGS-REP, используя wireshark на клиенте, порт tcp или udp 88.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...