Active Directory LDAPS e Java 181 LDAPS Verification

1

O Java 8u181 (Java 8 Update 181) aprimora a segurança em torno das conexões LDAPS:

Change: Improve LDAP support Endpoint identification has been enabled on LDAPS connections. To improve the robustness of LDAPS (secure LDAP over TLS ) connections, endpoint identification algorithms have been enabled by default. Note that there may be situations where some applications that were previously able to successfully connect to an LDAPS server may no longer be able to do so. Such applications may, if they deem appropriate, disable endpoint identification using a new system property: com.sun.jndi.ldap.object.disableEndpointIdentification. Define this system property (or set it to true) to disable endpoint identification algorithms. JDK-8200666 (not public)

Um desses aprimoramentos parece estar verificando se o nome do domínio está no certificado. No entanto, o comportamento padrão do Active Directory parece ser o de ter apenas o nome do servidor do AD retornado nos muitos registros A do nome de domínio do AD - e parece raro que os clientes suportem uma lista de hosts. / p>

Também vejo esse padrão fora do Java (ou seja, os programas do Go verificarão isso agora, além de ver as notas de lançamento do Go 1.10 em Certificate.Verify ).

Há um artigo de technet um pouco intimidante sobre como obter nomes no certificado de uma forma que será renovada: link

Tenho certeza de que não sou o único a encontrar isso aqui:

  1. Alguém teve sucesso em adicionar o nome ao certificado ou talvez usando um balanceador de carga na frente do LDAPS para clientes LDAP específicos não-AD genéricos?
  2. Alguém sabe se a Microsoft está com esse problema de alguma forma que possa ter alterações futuras que tornem "desabilitar a verificação e aguardar" uma tática sensata?
por Kyle Brandt 07.09.2018 / 17:24

1 resposta

1

Atingimos o mesmo problema e há poucas soluções para corrigir isso.

Causa raiz: só funciona quando você usa o nome do host do pool.

  • Correção 1: inclua -Dcom.sun.jndi.ldap.object.disableEndpointIdentification=true em seu aplicativo JAVA_OPTS e reinicie o servidor tomcat / application. Isso é para evitar a verificação estrita do ponto final.

  • Correção 2: Use o nome do host exato (FQDN) mencionado no certificado de apresentação do LDAPS.

Conheça o seu FQDN do servidor LDAPS: openssl s_client -connect [LDAPS server IP/DNS]:636 . Tente conectar o servidor LDAPS usando IP / DNS. Ele exibe o FQDN exato no atributo CN= . Use esse FQDN para configurar o servidor LDAPS.

  • Correção 3: Importa o certificado de apresentação do LDAPS (não a raiz ou intermediário) no servidor de aplicativos.
por 22.10.2018 / 20:18