Active Directory LDAPS und Java 181 LDAPS-Verifizierung

Active Directory LDAPS und Java 181 LDAPS-Verifizierung

Java 8u181 (Java 8 Update 181) verbessert die Sicherheit rund um LDAPS-Verbindungen:

Änderung: Verbesserung der LDAP-Unterstützung Die Endpunktidentifizierung wurde für LDAPS-Verbindungen aktiviert. Um die Robustheit von LDAPS-Verbindungen (sicheres LDAP über TLS) zu verbessern, wurden Endpunktidentifizierungsalgorithmen standardmäßig aktiviert. Beachten Sie, dass es Situationen geben kann, in denen einige Anwendungen, die zuvor erfolgreich eine Verbindung zu einem LDAPS-Server herstellen konnten, dies möglicherweise nicht mehr können. Solche Anwendungen können, wenn sie dies für angemessen halten, die Endpunktidentifizierung mithilfe einer neuen Systemeigenschaft deaktivieren: com.sun.jndi.ldap.object.disableEndpointIdentification. Definieren Sie diese Systemeigenschaft (oder setzen Sie sie auf „true“), um Endpunktidentifizierungsalgorithmen zu deaktivieren. JDK-8200666 (nicht öffentlich)

Eine dieser Verbesserungen scheint die Überprüfung zu sein, ob der Domänenname auf dem Zertifikat steht. Das Standardverhalten von Active Directory scheint jedoch darin zu bestehen, nur den Namen für den AD-Server zu haben, der zufällig unter den vielen A-Einträgen des AD-Domänennamens zurückgegeben wird – und es scheint selten zu sein, dass Clients eine Liste von Hosts unterstützen.

Ich sehe dieses Muster auch außerhalb von Java (d. h. Go-Programme überprüfen dies jetzt auch, sieheGo 1.10 - Versionshinweise zu Certificate.Verify).

Es gibt einen etwas einschüchternden Technet-Artikel darüber, wie man Namen auf ein Zertifikat bekommt, das erneuert wird:https://blogs.technet.microsoft.com/russellt/2016/06/03/custom-ldap-certs/

Ich bin sicher, dass ich nicht der Einzige bin, dem dieses Problem begegnet:

  1. Hat es jemand geschafft, entweder den Namen zum Zertifikat hinzuzufügen oder vielleicht einen Load Balancer vor LDAPS für allgemeine, nicht AD-spezifische LDAP-Clients zu verwenden?
  2. Weiß jemand, ob Microsoft sich in irgendeiner Weise mit diesem Problem befasst und ob es in Zukunft Änderungen geben könnte, die die Taktik „Überprüfung deaktivieren und warten“ sinnvoll machen?

Antwort1

Wir haben das gleiche Problem und es gibt nur wenige Lösungen, um es zu beheben.

Grundursache: Es würde nur NICHT funktionieren, wenn Sie den Pool-Hostnamen verwenden.

  • Fix 1: Integrieren Sie es -Dcom.sun.jndi.ldap.object.disableEndpointIdentification=truein Ihre Anwendung JAVA_OPTSund starten Sie den Tomcat/Anwendungsserver neu. So vermeiden Sie eine strenge Endpunktüberprüfung.

  • Fix 2: Verwenden Sie den genauen Hostnamen (FQDN), der im LDAPS-Präsentationszertifikat angegeben ist.

Kennen Sie den FQDN Ihres LDAPS-Servers: openssl s_client -connect [LDAPS server IP/DNS]:636. Versuchen Sie, den LDAPS-Server über IP/DNS zu verbinden. Der genaue FQDN wird im CN=Attribut angezeigt. Verwenden Sie diesen FQDN, um den LDAPS-Server zu konfigurieren.

  • Fix 3: Importieren Sie das LDAPS-Präsentationszertifikat (nicht das Stamm- oder Zwischenzertifikat) in den Anwendungsserver.

verwandte Informationen