Active Directory LDAPS 및 Java 181 LDAPS 확인

Active Directory LDAPS 및 Java 181 LDAPS 확인

Java 8u181(Java 8 업데이트 181)은 LDAPS 연결 관련 보안을 강화합니다.

변경 사항: LDAP 지원 개선 LDAPS 연결에서 엔드포인트 식별이 활성화되었습니다. LDAPS(TLS를 통한 보안 LDAP) 연결의 견고성을 향상하기 위해 엔드포인트 식별 알고리즘이 기본적으로 활성화되었습니다. 이전에 LDAPS 서버에 성공적으로 연결할 수 있었던 일부 응용 프로그램이 더 이상 연결할 수 없는 상황이 있을 수 있습니다. 이러한 응용 프로그램은 적절하다고 판단되는 경우 새로운 시스템 속성인 com.sun.jndi.ldap.object.disableEndpointIdentification을 사용하여 끝점 식별을 비활성화할 수 있습니다. 엔드포인트 식별 알고리즘을 비활성화하려면 이 시스템 속성을 정의하거나 true로 설정하세요. JDK-8200666(공개되지 않음)

이러한 향상된 기능 중 하나는 도메인 이름이 인증서에 있는지 확인하는 것 같습니다. 그러나 Active Directory의 기본 동작은 AD 도메인 이름의 많은 A 레코드 아래에 반환되는 AD 서버의 이름만 갖는 것으로 보이며 클라이언트가 호스트 목록을 지원하는 경우는 거의 없는 것 같습니다.

Java 외부에서도 이 패턴을 볼 수 있습니다. 즉, Go 프로그램은 이제 이 패턴도 확인합니다.Certificate.Verify에 대한 Go 1.10 릴리스 노트).

갱신되는 방식으로 인증서에 이름을 얻는 방법에 대한 다소 위협적인 Technet 기사가 있습니다.https://blogs.technet.microsoft.com/russellt/2016/06/03/custom-ldap-certs/

나는 여기에서 이 문제를 겪는 유일한 사람이 아닐 것이라고 확신합니다.

  1. 인증서에 이름을 추가하거나 AD가 아닌 일반적인 LDAP 클라이언트에 대해 LDAPS 앞에 로드 밸런서를 사용하는 데 성공한 사람이 있습니까?
  2. Microsoft가 향후 "확인을 비활성화하고 대기"하는 전략을 변경하게 될 수 있는 어떤 방식으로든 이 문제에 대해 알고 있는지 아는 사람이 있습니까?

답변1

동일한 문제가 발생했으며 이 문제를 해결할 수 있는 솔루션이 거의 없습니다.

근본 원인: 풀 호스트 이름을 사용할 때만 작동하지 않습니다.

  • 수정 1: -Dcom.sun.jndi.ldap.object.disableEndpointIdentification=true애플리케이션에 포함 JAVA_OPTS하고 Tomcat/애플리케이션 서버를 다시 시작합니다. 이는 엄격한 엔드포인트 검증을 피하기 위한 것입니다.

  • 수정 2: LDAPS 프레젠테이션 인증서에 언급된 정확한 호스트 이름(FQDN)을 사용합니다.

LDAPS 서버 FQDN을 알아보세요: openssl s_client -connect [LDAPS server IP/DNS]:636. IP/DNS를 사용하여 LDAPS 서버에 연결해 보십시오. CN=속성 에 정확한 FQDN이 표시됩니다 . 해당 FQDN을 사용하여 LDAPS 서버를 구성합니다.

  • 수정 3: 애플리케이션 서버에서 LDAPS 프레젠테이션 인증서(루트 또는 중간 인증서 아님)를 가져옵니다.

관련 정보