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

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

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).

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

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

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

решение1

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

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

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

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

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

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

Связанный контент