Проблемы с настройкой единого входа с использованием аутентификации Kerberos

Мне нужно для проверки подлинности набора приложений Ruby on Rail через Active Directory с использованием проверки подлинности Kerberos.

Некоторая техническая информация:

  1. Я использую Apache
  2. установленный mod_auth_kerb
  3. В httpd.conf я добавил LoadModule auth_kerb_module modules/mod_auth_kerb.so
  4. В /etc/krb5.conf я добавил следующую конфигурацию

    [logging]
     default = FILE:/var/log/krb5libs.log
     kdc = FILE:/var/log/krb5kdc.log
     admin_server = FILE:/var/log/kadmind.log
    
    
    [libdefaults]
     default_realm = EU.ORG.COM
     dns_lookup_realm = false
     dns_lookup_kdc = false
     ticket_lifetime = 24h
     forwardable = yes
    
    [realms]
     EU.ORG.COM = {
      kdc = eudc05.eu.org.com:88
      admin_server = eudc05.eu.org.com:749
      default_domain = eu.org.com
     }
    
    [domain_realm]
     .eu.org.com = EU.ORG.COM
     eu.org.com = EU.ORG.COM
    
    [appdefaults]
     pam = {
       debug = true
       ticket_lifetime = 36000
       renew_lifetime = 36000
       forwardable = true
       krb4_convert = false
     }
    
  5. Когда я тестирую kinit validuser и ввожу пароль, аутентификация проходит успешно.

  6. klist возвращает:

    Ticket cache: FILE:/tmp/krb5cc_600
    Default principal: validuser@EU.ORG.COM
    
    Valid starting     Expires            Service principal
    02/08/13 13:46:40  02/08/13 23:46:47  krbtgt/EU.ORG.COM@EU.ORG.COM
    
            renew until 02/09/13 13:46:40
    
    Kerberos 4 ticket cache: /tmp/tkt600
    klist: You have no tickets cached
    
  7. В настройках приложения Apache я добавил

    IfModule mod_auth_kerb.c>
    Location /winlogin>
        AuthType Kerberos
        AuthName "Kerberos Loginsss"
        KrbMethodNegotiate off
        KrbAuthoritative on
        KrbVerifyKDC off
        KrbAuthRealms EU.ORG.COM
        Krb5Keytab /home/crmdata/httpd/apache.keytab
        KrbSaveCredentials off
        Require valid-user
      </Location>
    </IfModule>
    
  8. Я перезапустил apache

Теперь несколько тестов:

  1. Когда я пытаюсь получить доступ к приложению из Win7, я получаю всплывающее окно с текстом:

    Warning: This server is requesting that your username and password be sent in an insecure manner (basic authentification without a secure connection)
    
  2. Когда я ввожу действительные учетные данные, тогда мое приложение открывается успешно, и все работает нормально.

Вопросы:

  1. Это нормально, что для пользовательских всплывающих окон такие окна? Если я использую аутентификацию NTLM, то такого всплывающего окна нет. Я проверил IE Internet Options и там проверено "Включить встроенную аутентификацию Windows".

  2. Почему IE пытается отправить имя пользователя и пароль в приложение apache? Если я правильно понимаю, Windows самостоятельно должна выполнить аутентификацию через Active Directory с использованием протокола Kerberos.

  3. Когда я пытаюсь получить доступ к приложению из Win7, и я ввожу неправильные учетные данные во всплывающем окне сообщения

    • Приложение говорит, что аутентификация не удалась (это нормально)
    • В журнале ошибок Apache я вижу:

      [error] [client 192.168.56.1] krb5_get_init_creds_password() failed: Client not found in Kerberos database 
      
    • Но теперь я не могу получить возможность ввести действительные учетные данные, только после перезапуска IE я могу снова получить всплывающее окно.

Что может быть неправильным или отсутствующим в моей настройке Kerberos?

В каком-то посте блога я читал, что, вероятно, что-то нужно делать на стороне Active Directory. Что именно?

1 ответ

Тебе нужно KrbMethodNegotiate on,
Без этого http-клиент, по сути, выполняет auth-basic для apache, и apache проверяет пароль против kdc.
Кроме того, ради безопасности вы должны установить KrbVerifyKDC on,

Другие вопросы по тегам