Apache2, Kerberos: сбой gss_accept_sec_context(): запрошен неподдерживаемый механизм
Я хочу использовать Kerberos и Apache 2 в Linux с mod_auth_kerb.
Я добавил.htaccess в свой проект со следующим:
#SSLRequireSSL
AuthType Kerberos
AuthName "Kerberos Login"
KrbMethodNegotiate On
KrbMethodK5Passwd Off
KrbAuthRealms DOMAIN.COM
Krb5KeyTab /etc/httpd/httpd.keytab
KrbLocalUserMapping On
require valid-user
Когда я пытался проверить свой единый вход в IE или Firefox, я получаю следующую ошибку в журнале apache:
[Thu Jan 19 21:03:27 2012] [error] [client 10.65.0.1] gss_accept_sec_context() failed: An unsupported mechanism was requested (, Unknown error)
Я не знаю, что это и что я должен сделать, чтобы это работало.
Моя цель - заполнить REMOTE_USER именем пользователя AD. Но сейчас я ничего не могу сделать из-за этой ошибки...
3 ответа
Была проблема с принципалами. Я пересоздал /etc/httpd/httpd.keytab и правильно добавил принципал HTTP, и все работает отлично!
В простой настройке, используя mod_auth_gssapi и FreeIPA в качестве сервера krb5 и для создания ключей, я обнаружил, что добавление следующего рядом с AuthType
Команда обратилась к проблеме.
BrowserMatch Windows gssapi-no-negotiate
Судя по ответу andsens, похоже, что это действительно происходит на клиентах Windows, которые пытаются использовать NTLM. GssapiAllowedMech krb5
а также GssapiBasicAuthMech krb5
не дают успешных результатов переговоров, поэтому, похоже, единственным решением является отключение переговоров. Я не могу гарантировать, что это точно, но это сработало для меня.
Соответствующая документация здесь
Я обнаружил еще одну причину этой ошибки:
Windows пытается аутентифицироваться с NTLM. На самом деле это корень проблемы.
Я не понимаю, как помогло воссоздание таблицы ключей, тогда ошибка будет выглядеть примерно так: "Запись таблицы ключей не найдена".
Windows пытается пройти аутентификацию через NTLM, когда не может получить билет от KDC.
Для меня причина этого состояла в том, что мой сервер не был расположен в той же области. Домен был ad.domain.com
, но мой сервер был расположен в something.domain.com
, Я уверен, что вы можете разрешить это как-нибудь, но простое решение - просто изменить имя хоста, указывающее на сервер (и затем создать новую таблицу ключей для этого домена).