Apache и Kerberos SSO с несколькими vhosts и несколькими SPN
Я хотел бы сделать единый вход на сайт в моем окне Windows. Я использую модуль аутентификации Kerberos apache. Это работает довольно хорошо, когда есть только один веб-сайт.
Это текущая конфигурация:
Файл.htaccess:
RewriteEngine On
AuthType Kerberos
AuthName "Login"
KrbAuthRealms MY.DOMAIN.NAME
KrbServiceName HTTP/sub1.domain.com@MY.DOMAIN.NAME
Krb5Keytab /etc/mykeytab.keytab
KrbMethodK5Passwd on
KrbAuthoritative on
KrbMethodNegotiate on
Require valid-user
Чтобы это работало, мне нужно было создать файл keytab на контроллере Active Directory с помощью следующей команды:
ktpass -out c:\temp\mykeytab.keytab
-princ HTTP/sub1.domain.com@MY.DOMAIN.NAME
-mapUser user1
-mapOp set
-pass secret
-crypto AES256-SHA1
-pType KRB5_NT_PRINCIPAL
Как уже говорилось, до этого момента все работало довольно хорошо. Теперь для сложной части:
Я хотел бы иметь второй веб-сайт (vhost) на той же физической машине, которая использует того же пользователя Active Directory (user1). Мне все равно, нужно ли мне использовать другое имя участника-службы (SPN) или я могу использовать то же имя, что и раньше.
Новый сайт называется:
sub2.domain.com
и .htaccess
файл
Файл.htaccess:
RewriteEngine On
AuthType Kerberos
AuthName "Login"
KrbAuthRealms MY.DOMAIN.NAME
KrbServiceName HTTP/sub2.domain.com@MY.DOMAIN.NAME
Krb5Keytab /etc/mykeytab2.keytab
KrbMethodK5Passwd on
KrbAuthoritative on
KrbMethodNegotiate on
Require valid-user
Я также создал новый файл keytab следующим образом:
ktpass -out c:\temp\mykeytab2.keytab
-princ HTTP/sub2.domain.com@MY.DOMAIN.NAME
-mapUser user1
-mapOp add
-pass secret
-crypto AES256-SHA1
-pType KRB5_NT_PRINCIPAL
-in c:\temp\mykeytab1.keytab
Этот файл ключей теперь содержит оба имени участника-службы, сопоставленные с user1.
При открытии обоих веб-сайтов только sub1 все еще работает, sub2 выдает приглашение на вход в систему, то есть SSO не работает с sub2.
К сожалению, файлы журнала apache2 не содержат никакой связанной информации, хотя я использовал LogLevel debug
,
Тем временем я обнаружил, что одной из моих проблем является номер версии ключа (kvno), который отличается в обеих таблицах ключей, а также в объединенном файле ключей. (Обе записи сохраняют свое первоначальное значение kvno, при этом старшая становится недействительной, как только новая становится активной...) Есть ли способ иметь одинаковое kvno для обеих клавиатурных таблиц (или для обеих записей объединенной ключевой таблицы?). Кстати, соответствующее сообщение журнала ошибок:
[auth_kerb:error] [pid 8222] [client 10.10.10.10:59840] gss_accept_sec_context() failed: Unspecified GSS failure. Minor code may provide more information (, Key version number for principal in key table is incorrect)
Кто-нибудь знает, почему sub2 не работает правильно, а sub1 работает?... а что я могу сделать, чтобы иметь такой же квнос?
Бест, ТомС
1 ответ
Ваш KVNO (ключевой номер версии), кажется, не правильно. Если вы используете AD, вы можете сгенерировать таблицу ключей с помощью KVNO 255 (AD не использует KVNO). Вы можете включить отладку, как описано здесь: Устранение неполадок Kerberos, и если вы опубликуете содержимое файла трассировки, я смогу рассказать больше.