Canonicalize in kd c -options автоматически устанавливается в true в Windows - PullRequest
1 голос
/ 24 марта 2020

Недавно я написал фрагмент кода для JavaEE8, который аутентифицирует пользователей, запрашивая услуги у сервера приложений, используя Kerberos в домене Active Directory. Это включает в себя процесс, который использует файл keytab для аутентификации сервера по kd c целевого домена.
Все отлично работает при использовании текущих систем, но теперь я должен аутентифицировать сервер, используя работающий kd c на Windows 2008 Server.
Я некоторое время боролся с java.lang.RuntimeException: javax.security.auth.login.LoginException: Message stream modified (41) и наконец понял проблему:
KD C на машине Windows 2008, очевидно, еще не поддерживает RF C 6806 - Раздел 11 FAST-схема (EN C -PA-REP флаг) и, следовательно, клиент не должен использовать kd c -option canonicalize=true.
Хотя значение по умолчанию для canonicalize должно быть ложным ( в соответствии с Документация MIT Kerberos ) на самом деле он установлен на true все время при использовании машины windows в качестве клиента.
Это можно увидеть, отслеживая сетевой трафик c с помощью wireshark и просматривая AS-REQ в разделе req-body -> kd c -options -> canonicalize .
Интересно, что это только происходит в Windows. При использовании Linux в качестве клиента для canonicalize по умолчанию установлено значение false, и все работает просто отлично.

Я попытался добавить все найденные настройки, которые содержат любые ссылки на канонизацию, в krb5.conf , используемый моим клиентом, но на самом деле ничего не изменило канонизированный вариант kd c, как показано в AS-REQ.
Так что, похоже, в Windows есть определенная настройка, которая переопределяет канонизированный вариант kd c, чтобы он всегда был верным.

Если у кого-то есть идеи относительно того, что это может быть и как я могу изменить это поведение, я буду очень благодарен!

Вот как выглядит мой раздел libdefaults в krb5.conf:

[libdefaults]
  default_realm = [our realm name]
  dns_lookup = false 
  dns_lookup_kdc = false  
  dns_lookup_realm = false
  default_tkt_enctypes = aes256-cts rc4-hmac
  default_tgs_enctypes = aes256-cts
  permitted_enctypes = aes256-cts
  canonicalize = false
  dns_canonicalize_hostname = false
  rdns = false


РЕДАКТИРОВАТЬ: Я также попытался установить kdc_default_options = 0x00000000 в файле krb5.conf. Это значение, которое устанавливается по умолчанию при работе на Linux, тогда как на Windows оно всегда установлено на 00010000. (Разница в том, что параметр canonicalize в опциях kd c установлен на true с 00010000).
К сожалению, это ничего не изменило. Также не было добавления этого параметра с 00010000 к версии Linux. Это заставляет меня задаться вопросом, действительно ли эти параметры из krb5.conf даже используются.
Я знаю, что те, которые описывают домен, область, kd c и типы шифрования, фактически используются из этого файла, но остальные из них кажется, на самом деле не оказывает никакого влияния.

Есть ли у кого-нибудь опыт такого поведения?

1 Ответ

1 голос
/ 08 апреля 2020

У меня была точно такая же проблема.

После большой отладки я решил, установив системное свойство

sun.security.krb5.disableReferrals=true

Таким образом, запрос не канонизируется.

...