Kerberos - Настройка доменной авторизации для одного домена
    • 15 Dec 2023
    • 1 Minute to read
    • Contributors
    • Dark
      Light
    • PDF

    Kerberos - Настройка доменной авторизации для одного домена

    • Dark
      Light
    • PDF

    Article summary

    Настройка файлов конфигурации AD


    1. В домене создать системного пользователя и добавить spn для него, например:
    Логин:        doczilla
    Пароль: doczPswd! 

    описание команды: 

    https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2012-r2-and-2012/cc731241(v=ws.11)
    пример команды:

    setspn -A HTTP/doczilla.testdomain.local  doczilla

    2. Создать krb5.keytab файл, с параметрами созданного системного пользователя.

    описание команды:

    https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/ktpass

    пример команды, верхний и нижний регистр очень важен:

    ktpass -princ HTTP/doczilla.testdomain.local@TESTDOMAIN.LOCAL -mapuser doczilla@testdomain.local -crypto ALL -ptype KRB5_NT_PRINCIPAL -pass doczPswd! -out krb5.keytab

    Если используется шифрование AES256-SHA1

    Необходимо в Свойствах системной учетной записи в AD поставить галку «Поддержка Kerberos AES 256»




    3. В папке проекта по пути ./conf/spnego/ доступны шаблоны конфигурационных файлов:

    • jaas.conf
    • krb5.ini

    их нужно или вынести за пределы проекта (по умолчанию в /opt/doczilla/conf/spnego/), или при обновлении проекта шаблоны файлов не перезаписывать.

    4. Файл krb5.keytab полученный в п.2 скопировать в папку(по умолчанию в /opt/doczilla/conf/spnego/) с файлами конфигурации из п.3

    5. Скопированные файлы из п.3 отредактировать согласно комментариям внутри файлов

    6. В файле проекта, путь по умолчанию /opt/doczilla/bin/service.sh 

    - Включить режим доменной авторизации и расширенных логов для отладки, раскомментируйте:

    DEBUG="true"
    
    SSO="SPNEGO"
    

    - замените наименование домена, в переменной (обязательно Большими Буквами) и поменяйте название сайта проекта

    DOMAIN="TESTDOMAIN.LOCAL"
    
    TARGET="HTTP/doczilla.testdomain.local" 

    - замените значения переменных приведенных ниже, если файлы конфигов перенесли:

    JAVA_OPTS="$JAVA_OPTS -Djava.security.krb5.conf=$HOME/conf/spnego/krb5.ini"
    JAVA_OPTS="$JAVA_OPTS -Djava.security.auth.login.config=$HOME/conf/spnego/jaas.conf"

    - посмотреть содержимое файла ”krb5.keytab”

    ktutil
    ktutil:  read_kt  krb5.keytab
    ktutil:  list
    ##или командой
    klist -kte  krb5.keytab

    7. Настройка доверенной зоны

    Для работы доменной авторизации Internet Explorer должен учитывать, что запрошенный URL-адрес находится в интрасети (локальной).

    описание:  

    https://docs.microsoft.com/en-us/troubleshoot/browsers/prompt-for-username-and-password

    Запустите IE -> Сервис -> Свойства браузера -> вкладка Безопасность -> Местная интрасеть -> кнопка Сайты -> кнопка Дополнительно -> добавить в зону сайт приложения -> кнопка Добавить -> кнопка Закрыть

    Содержимое шаблонов


    jaas.conf:

    /**
    replace principal with "HTTP/<doczilla-address>@<DOMAIN-REALM>"
    replace keyTab path if different
    */
    
    com.sun.security.jgss.initiate {
        com.sun.security.auth.module.Krb5LoginModule required
        principal="HTTP/doczilla.testdomain.local@TESTDOMAIN.LOCAL"
        keyTab="/opt/doczilla/conf/spnego/krb5.keytab"
        useKeyTab=true
        storeKey=true
        debug=true
        isInitiator=false;
    };
    
    com.sun.security.jgss.accept {
        com.sun.security.auth.module.Krb5LoginModule required
        principal="HTTP/doczilla.testdomain.local@TESTDOMAIN.LOCAL"
        useKeyTab=true
        keyTab="/opt/doczilla/conf/spnego/krb5.keytab"
        storeKey=true
        debug=true
        isInitiator=false;
    };

    krb5.ini:

    # replace default_realm
    # replace default_keytab_name if different
    
    [libdefaults]
    default_realm = TESTDOMAIN.LOCAL
    default_keytab_name = FILE:/opt/doczilla/conf/spnego/krb5.keytab
    permitted_enctypes = aes128-cts aes256-cts arcfour-hmac-md5
    default_tgs_enctypes = aes128-cts aes256-cts arcfour-hmac-md5
    default_tkt_enctypes = aes128-cts aes256-cts arcfour-hmac-md5
    
    # replace. kdc - Key distribution center
    [realms]
    TESTDOMAIN.LOCAL = {
       kdc = testdomain.local
       admin_server = testdomain.local
       default_domain = testdomain.local
    }
    
    # replace
    [domain_realm]
    .testdomain.local = TESTDOMAIN.LOCAL
    
    [appdefaults]
    autologin = true
    forwardable = true

    Возможные ошибки

    1. При выполнении утилиты ktpass можно получить следующую ошибку 

    Password set failed! 0x00000020

    Данная ошибка возникает в том случае, если используемый при генерации keytab файла технический пользователь содержит в своем DN-пути не латинские символы - например, кириллицу. Единственным верным решением будет перенести данного пользователя в расположение с латинскими символами - например, в стандартный контейнер Users. По завершению генерации keytab файла, пользователя можно будет вернуть на его прежнее место. 




    Was this article helpful?