Verificação LDAPS do Active Directory e Java 181 LDAPS

Verificação LDAPS do Active Directory e Java 181 LDAPS

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

Alteração: Melhorar o suporte LDAP A identificação de endpoint foi habilitada em conexões LDAPS. Para melhorar a robustez das conexões LDAPS (LDAP seguro sobre TLS), os algoritmos de identificação de endpoint foram habilitados por padrão. Observe que pode haver situações em que alguns aplicativos que anteriormente conseguiam se conectar com êxito a um servidor LDAPS talvez não consigam mais fazê-lo. Esses aplicativos podem, se considerarem apropriado, desativar a identificação do terminal usando uma nova propriedade do sistema: com.sun.jndi.ldap.object.disableEndpointIdentification. Defina esta propriedade do sistema (ou configure-a como verdadeira) para desabilitar algoritmos de identificação de terminal. JDK-8200666 (não público)

Uma dessas melhorias parece ser a verificação de que o nome de domínio está no certificado. No entanto, o comportamento padrão do Active Directory parece ser ter apenas o nome do servidor AD que é retornado sob os muitos registros A do nome de domínio AD - e parece raro que os clientes suportem uma lista de hosts.

Também vejo esse padrão fora do Java (ou seja, os programas Go também verificarão isso agora, vejaVá para as notas de versão 1.10 em Certificate.Verify).

Há um artigo do technet um tanto intimidante sobre como obter nomes no certificado de uma forma que será renovada:https://blogs.technet.microsoft.com/russsellt/2016/06/03/custom-ldap-certs/

Tenho certeza de que não sou o único aqui passando por isso:

  1. Alguém teve sucesso ao adicionar o nome ao certificado ou talvez ao usar um balanceador de carga na frente do LDAPS para clientes LDAP genéricos não específicos do AD?
  2. Alguém sabe se a Microsoft está tratando desse problema de alguma forma que possa ter mudanças no futuro que tornem "desativar a verificação e esperar" uma tática sensata?

Responder1

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

Causa raiz: NÃO funcionaria apenas quando você usasse o nome de host do pool.

  • Correção 1: inclua -Dcom.sun.jndi.ldap.object.disableEndpointIdentification=trueem seu aplicativo JAVA_OPTSe reinicie o servidor Tomcat/aplicativo. Isso evita a verificação rigorosa do ponto final.

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

Conheça o FQDN do seu 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 CN=atributo. Use esse FQDN para configurar o servidor LDAPS.

  • Correção 3: importe o certificado de apresentação LDAPS (não o raiz ou intermediário) no servidor de aplicativos.

informação relacionada