Назад | Перейти на главную страницу

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

(Сжатие Debian)

Я пытаюсь настроить 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/SYD01TBUG02.onevue.com.au.local@ONEVUE.COM.AU.LOCAL
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 - myaccount.lastname@MYDOMAIN.LOCAL [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. Убедитесь, что у вас есть правильная запись DNS для SYD01TBUG02 (Запись) на вашем DNS-сервере, указывающая на ваш веб-сервер
  2. Убедитесь, что у вас есть связь между SPN вашего веб-сервиса и пользователем AD. На сервере AD выполните эту команду:

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

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

    ktpass -princ HTTP/SYD01TBUG02.onevue.com.au.local@ONEVUE.COM.AU.LOCAL -mapuser ad_username -pass xxxxxx -crypto ALL -ptype KRB5_NT_PRINCIPAL -out SYD01TBUG02.keytab -setupn -setpass

    где xxxxxx - пароль пользователя AD. Мы используем -crypto ВСЕ вариант, чтобы убедиться, что мы добавили все поддерживаемые хэши в файл keytab.
  4. Теперь вы должны скопировать сгенерированный SYD01TBUG02.keytab файл на свой веб-сервер и скопируйте его в определенный каталог. Например, скопируем его в / и т.д. / 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 admin@onevue.com.au
        
        <Location "/">
            AuthType Kerberos
            KrbAuthRealms ONEVUE.COM.AU.LOCAL
            KrbServiceName HTTP/SYD01TBUG02.onevue.com.au.local@ONEVUE.COM.AU.LOCAL
            Krb5Keytab /etc/apache2/keytab/SYD01TBUG02.keytab
            KrbMethodNegotiate on
            KrbMethodK5Passwd on
            KrbVerifyKDC on
            require valid-user    
        </Location>
        <Directory />
        </Directory>
    </VirtualHost> 
    
  6. Перезагрузите или перезапустите apache sudo service apache2 reload
  7. Теперь, если вы наберете http: // SYD01TBUG02 / в адресной строке браузера, вы автоматически войдете в свою веб-службу через SSO (Chrome, браузеры, подобные Chromium, и IE поддерживают SSO из коробки, но есть также плагин для Firefox).

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

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

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

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

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