Apache, использующий mod_auth_kerb, всегда запрашивает пароль дважды

Apache, использующий mod_auth_kerb, всегда запрашивает пароль дважды

(Debian Squeeze)

Я пытаюсь настроить Apache на использование аутентификации Kerberos, чтобы разрешить пользователям AD входить в систему. Он работает, но дважды запрашивает у пользователя имя пользователя и пароль, причем первый раз игнорируется (независимо от того, что именно введено). Только второй запрос включает строку AuthName из конфигурации (т. е. первое окно — это общее имя пользователя/пароль, второе включает заголовок «Вход Kerberos»). На данном этапе меня не беспокоит работа встроенной аутентификации Windows, я просто хочу, чтобы пользователи могли входить в систему с помощью своих учетных записей AD, чтобы нам не нужно было настраивать второй репозиторий учетных записей пользователей.

Как это исправить, чтобы убрать первую бесполезную подсказку?

Директивы в файле apache2.conf:

<Directory /var/www/kerberos>
AuthType Kerberos
AuthName "Kerberos Login"
KrbMethodNegotiate On
KrbMethodK5Passwd On
KrbAuthRealms ONEVUE.COM.AU.LOCAL
Krb5KeyTab /etc/krb5.keytab
KrbServiceName HTTP/[email protected]
require valid-user
</Directory>

krb5.conf:

[libdefaults]
    default_realm = ONEVUE.COM.AU.LOCAL
[realms]
    ONEVUE.COM.AU.LOCAL = {
        kdc = SYD01PWDC01.ONEVUE.COM.AU.LOCAL
        master_kdc = SYD01PWDC01.ONEVUE.COM.AU.LOCAL
        admin_server = SYD01PWDC01.ONEVUE.COM.AU.LOCAL
        default_domain = ONEVUE.COM.AU.LOCAL
    }
[login]
    krb4_convert = true
    krb4_get_tickets = false

Журнал доступа при доступе к защищенному каталогу (обратите внимание на два отдельных 401)

192.168.10.115 - - [24/Aug/2012:15:52:01 +1000] "GET /kerberos/ HTTP/1.1" 401 710 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.83 Safari/537.1"
192.168.10.115 - - [24/Aug/2012:15:52:06 +1000] "GET /kerberos/ HTTP/1.1" 401 680 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.83 Safari/537.1"
192.168.10.115 - [email protected] [24/Aug/2012:15:52:10 +1000] "GET /kerberos/ HTTP/1.1" 200 375 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.83 Safari/537.1"

И одна строка в error.log

[Fri Aug 24 15:52:06 2012] [error] [client 192.168.0.115] gss_accept_sec_context(2) failed: An unsupported mechanism was requested (, Unknown error)

решение1

Не знаю, нужен ли вам еще ответ, но надеюсь, что помогу кому-то еще, поделившись своим опытом. Я верю, что если вы выполните эти шаги, все будет работать хорошо.

  1. Убедитесь, что у вас есть правильная запись DNS дляSYD01TBUG02(Запись) на вашем DNS-сервере, указывающая на ваш веб-сервер
  2. Убедитесь, что у вас есть связь между SPN вашего веб-сервиса и пользователем AD. На сервере AD выполните эту команду:

    setspn -A HTTP/SYD01TBUG02.onevue.com.au.local ad_username

  3. Убедитесь, что у вас сгенерирован правильный keytab. Выполните эту команду на сервере AD:

    ktpass -princ HTTP/[email protected] -mapuser ad_username -pass xxxxxx -crypto ALL -ptype KRB5_NT_PRINCIPAL -out SYD01TBUG02.keytab -setupn -setpass

    где xxxxxx — пароль пользователя AD. Мы используем-крипто ВСЕопция, позволяющая убедиться, что мы добавляем все поддерживаемые хэши в файл keytab.
  4. Теперь вам следует скопировать сгенерированныйSYD01TBUG02.keytabфайл на ваш веб-сервер и скопируйте его в определенный каталог. Например, давайте скопируем его в/etc/apache2/keytab/папка.
  5. Пример файла конфигурации Apache для веб-сервиса:
    <VirtualHost *:80>
        DocumentRoot "/var/www/kerberos"
        ServerName SYD01TBUG02.onevue.com.au.local
        ServerAlias SYD01TBUG02
        AddDefaultCharset UTF-8
        DirectoryIndex index.php
        ErrorLog /var/log/apache2/error_SYD01TBUG02.log
        TransferLog /var/log/apache2/transfer_SYD01TBUG02.log
        LogLevel warn
        ServerAdmin [email protected]
        
        <Location "/">
            AuthType Kerberos
            KrbAuthRealms ONEVUE.COM.AU.LOCAL
            KrbServiceName HTTP/[email protected]
            Krb5Keytab /etc/apache2/keytab/SYD01TBUG02.keytab
            KrbMethodNegotiate on
            KrbMethodK5Passwd on
            KrbVerifyKDC on
            require valid-user    
        </Location>
        <Directory />
        </Directory>
    </VirtualHost> 
    
  6. Перезагрузите или перезапустите Apachesudo service apache2 reload
  7. Теперь, если вы введете http://SYD01TBUG02/ в адресной строке браузера, вы автоматически войдете в свой веб-сервис с помощью SSO (Chrome, Chromium-подобные браузеры и IE поддерживают SSO по умолчанию, но есть такжеплагин для Firefox).

Надеюсь, это поможет вам настроить аутентификацию Kerberos на веб-сервере.

ПСЕсли вы хотите включить SSO по полному адресу (например,SYD01TBUG02.onevue.com.au.local) вам следует добавитьSYD01TBUG02.onevue.com.au.localв зону интрасети либо через групповые политики AD (если это нужно на нескольких машинах в домене), либо локально через настройки Internet Explorer. Эти настройки влияют на все браузеры, установленные в системе.

решение2

Это потому, что когда пользователь в первый раз вводит u/p, на сервер отправляется токен ntlm. Во второй раз это правильный токен kerberos.

К сожалению, нет возможности исключить первую подсказку.

решение3

Если единый вход не является обязательным, вы можете отключить согласование, установив 'KrbMethodNegotiate off'. Это даст вам только один базовый вход, а также позволит избежать дополнительного запроса GET для каждой транзакции.

Связанный контент