Active Directory LDAPS и проверка LDAPS Java 181

Java 8u181 (Java 8 Update 181) повышает безопасность соединений LDAPS:

Изменение: улучшена поддержка LDAP. Включена идентификация конечной точки. на LDAPS-соединениях. Для повышения устойчивости LDAPS (безопасный LDAP через TLS), алгоритмы идентификации конечных точек были включен по умолчанию. Обратите внимание, что могут быть ситуации, когда некоторые приложения, которые ранее могли успешно подключаться к Сервер LDAPS, возможно, больше не сможет этого сделать. Такие приложения могут, если они сочтут целесообразным отключить идентификацию конечных точек с помощью нового системное свойство: com.sun.jndi.ldap.object.disableEndpointIdentification. Определите это системное свойство (или установите для него значение true), чтобы отключить идентификацию конечной точки алгоритмы. JDK-8200666 (не общедоступно)

Похоже, одно из этих улучшений проверяет, указано ли доменное имя в сертификате. Однако поведение Active Directory по умолчанию, похоже, заключается в том, чтобы иметь только имя для сервера AD, которое возвращается под множеством A-записей доменного имени AD - и кажется, что клиенты редко поддерживают список хостов.

Я также вижу этот шаблон вне Java (то есть программы Go будут это сейчас проверять, см. Примечания к выпуску Go 1.10 на Certificate.Verify ).

Есть несколько пугающая техническая статья о внесении имен в сертификат, который будет обновлен: https://blogs.technet.microsoft.com/russellt/2016/06/03/custom-ldap -certs /

Я уверен, что не только я здесь сталкиваюсь с этим:

  1. Удалось ли кому-нибудь добавить имя в сертификат или, возможно, использовать балансировщик нагрузки перед LDAPS для общих клиентов LDAP, не относящихся к AD?
  2. Кто-нибудь знает, занимается ли Microsoft этим вопросом каким-либо образом в будущем могут произойти изменения, которые сделают «отключить проверку и подождать» разумной тактикой?
2
задан 7 September 2018 в 18:34
1 ответ

Мы столкнулись с одной и той же проблемой, и есть несколько решений, чтобы исправить это.

Коренная причина: Это НЕ сработает только при использовании имени хоста пула.

  • Исправление 1: Включите -Dcom.sun.jndi.ldap.object.disableEndpointIdentification=true в ваше приложение JAVA_OPTS и перезапустите сервер tomcat/application. Это сделано для того, чтобы избежать строгой проверки конечной точки.

  • Исправление 2: Используйте точное имя хоста (FQDN), указанное в сертификате представления LDAPS.

Знайте FQDN вашего сервера LDAPS: openssl s_client - подключите [LDAPS IP/DNS сервера]:636. Попробуйте подключить сервер LDAPS с помощью IP/DNS. В атрибуте CN= отображается точное FQDN. Используйте это FQDN для настройки сервера LDAPS.

  • Исправление 3: Импорт сертификата представления LDAPS (не корневого или промежуточного) в сервер приложений.
1
ответ дан 3 December 2019 в 12:32

Теги

Похожие вопросы