"KDC не поддерживает тип шифрования" при настройке межобластного доверия между MIT Kerberos и Active Directory

В настоящее время я настраиваю среду, в которой у меня есть набор машин Solaris и Linux, использующих выделенную область Krberos 5 (MIT, в Solaris 11, krb5-config --version возвращает: Solaris Kerberos (based on MIT Kerberos 5 release 1.6.3)). У нас также есть сервер Active Directory (Windows 2003) для отдельной области.

Моя цель состоит в том, чтобы все пользователи на сервере AD, а также субъекты host/nnn, nfs/nnn и cifs/nnn в области MIT. Я пытаюсь установить междоменное доверие между этими двумя сферами.

Предположим следующее:

  • Область Unix: EXAMPLE.COM
  • AD realm: AD.EXAMPLE.COM

Я настроил межобластное доверие AD в соответствии с документацией Microsoft с двусторонним доверием.

Что происходит, так это то, что межрегиональная аутентификация работает только в одном направлении. Из AD в Unix работает:

# kinit adtest@AD.EXAMPLE.COM
Password for adtest@AD.EXAMPLE.COM: 
root@clienttest2:~# kvno ltest@EXAMPLE.COM
ltest@EXAMPLE.COM: kvno = 1

Но обратное не дает и выдает сообщение об ошибке: KDC не поддерживает тип шифрования при получении учетных данных для adtest@AD.EXAMPLE.COM

# kinit ltest@EXAMPLE.COM
Password for ltest@EXAMPLE.COM: 
root@clienttest2:~# kvno adtest@AD.EXAMPLE.COM
kvno: KDC has no support for encryption type while getting credentials for adtest@AD.EXAMPLE.COM

Обратите внимание, что я пробовал все виды разных вещей. Некоторые из них:

  • Настроил кросс-царские ключи на стороне Unix для использования rc4-hmac только с тем эффектом, что вызов kvno даже не сможет найти KDC на стороне Microsoft.
  • добавленной default_tkt_enctypes а также default_tgs_enctypes записи, чтобы заставить использование rc4-hmac, Это было необходимо только для того, чтобы заставить работать аутентификацию по AD.

Что может быть причиной этого, и как я могу выяснить, что на самом деле происходит? В частности, было бы очень полезно точно знать, какой тип шифрования он пытается использовать, для которого KDC не поддерживает. Также было бы полезно узнать, какой KDC отправил ошибку.

Для полноты, вот содержание krb5.conf файл:

[libdefaults]
    default_realm = EXAMPLE.COM
    allow_weak_crypto = true
        verify_ap_req_nofail = false
        default_tkt_enctypes = rc4-hmac
        default_tgs_enctypes = rc4-hmac

[realms]
    EXAMPLE.COM = {
        kdc = unix-server.example.com
        admin_server = unix-server.example.com
    }
    AD.EXAMPLE.COM = {
        kdc = ad-server.ad.example.com
        admin_server = ad-server.ad.example.com
    }

[domain_realm]
    .example.com = EXAMPLE.COM
    .ad.example.com = AD.EXAMPLE.COM

[capaths]
    EXAMPLE.COM = {
        AD.EXAMPLE.COM = .
    }
    AD.EXAMPLE.COM = {
        EXAMPLE.COM = .
    }

[logging]
    default = FILE:/var/krb5/kdc.log
    kdc = FILE:/var/krb5/kdc.log
    kdc_rotate = {
        period = 1d
        versions = 10
    }

[appdefaults]
    kinit = {
        renewable = true
        forwardable = true
    }

2 ответа

Решение

Я решил проблему. Я публикую ответ здесь, если кто-то еще столкнется с той же проблемой.

Решение было очень простым. Мне нужно было убедиться, что принципы проверки подлинности между областями были созданы с одним типом кодировки типа rc4-hmac:

addprinc -e rc4-hmac krbtgt/AD.EXAMPLE.COM@EXAMPLE.COM
addprinc -e rc4-hmac krbtgt/EXAMPLE.COM@AD.EXAMPLE.COM

Насколько я могу судить, MIT KDC использует наиболее безопасный тип кодировки при отправке заявки на сервер AD. Сервер AD не может обработать эту кодировку и поэтому ответил с ошибкой, что тип шифрования не поддерживается. Имея только один тип кодировки для участников, сервер MIT будет использовать этот тип при обращении к серверу AD.

Я решил это, проверив ошибку в журнале. Ошибка указана:
- Журналы начинаются в вторник 2018-05-22 13:03:55 UTC, заканчиваются в понедельник 2018-06-18 10:41:01 UTC. -
18 июня, 10:40:55 nlxxp1 realmd[1609]: * Разрешение: _ldap._tcp.local.domain
18 июня, 10:40:55 nlxxp1 realmd[1609]: * Выполнение поиска LDAP DSE: 10.xx1
18 июня, 10:40:55 nlxxp1 realmd[1609]: * Выполнение поиска LDAP DSE: 10.xx30
18 июня 10:40:55 nlxxp1 realmd[1609]: * Выполнение поиска LDAP DSE: 10.xx60
18 июня, 10:40:55 nlxxp1 realmd[1609]: * Успешно обнаружен: local.domain
18 июня, 10:41 nlxxp1 realmd [1609]: * Предполагается, что пакеты установлены
18 июня 10:41:00 nlxxp1 realmd[1609]: * LANG=C /usr/sbin/adcli join --verbose --domain local.domain --domain-realm LOCAL.DOMAIN --domain-controller 10.xx1 --login-type user --login-user localuser --stdin-пароль
18 июня 10:41:00 nlxxp1 realmd [1609]: * Использование доменного имени: local.domain
18 июня, 10:41 nlxxp1 realmd [1609]: * Расчетное имя учетной записи компьютера из fqdn: NLXXP1
18 июня, 10:41: nlxxp1 realmd [1609]: * Использование домена realm: local.domain
18 июня 10:41:00 nlxxp1 realmd [1609]: * Отправка пингов netlogon на контроллер домена: cldap://10.xx1
18 июня, 10:41:01 nlxxp1 realmd[1609]: * Получена информация NetLogon от: dc.local.domain
18 июня 10:41:01 nlxxp1 realmd[1609]: * Записал фрагмент krb5.conf в /var/cache/realmd/adcli-krb5-QudocS/krb5.d/adcli-krb5-conf-8Gyp0B
18 июня 10:41:01 nlxxp1 realmd[1609]:! Не удалось подтвердить подлинность как: localuserc@LOCAL.DOMAIN: KDC не поддерживает тип шифрования
18 июня, 10:41:01. Nlxxp1 realmd[1609]: adcli: не удалось подключиться к домену local.domain: не удалось подтвердить подлинность как: localuser@LOCAL.DOMAIN: KDC не поддерживает тип шифрования
18 июня 10:41:01 nlxxp1 realmd[1609]:! Не удалось присоединиться к домену

Мой домен является смешанным доменом с 2003 DC.
После того, как я вошел в DNS и изменил запись _ldap._tcp.local.domain 2003 DC (я придал ему более тяжелый вес 400), он поднял более новый (2012R2 DC), который смог присоединить сервер к домену.

Я предполагаю, что используемый тип шифрования не поддерживался DC 2003 года.

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