O JRE falha ao estabelecer conexão LDAPS com o AD após o certificado RootCA ter sido importado para o truststore cacerts

4

O LDAPS está funcionando através do ldp.exe e de vários outros programas em sistemas Windows e Linux que não parecem requerer o Certificado Raiz. em absoluto. Alguns programas que usam JSSE não conseguem se conectar após a importação da CA raiz e intermediária para o truststore cacerts.

Testei a importação do certificado LDAPS presente em NTDS \ Personal (do AD) diretamente para cacerts e, em determinados aplicativos que usam java, isso faz com que o LDAP seguro funcione.

Em programas que usam java e falham, quando o certificado raiz é importado, recebo o erro:

[Root exception is javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path validation failed: java.security.cert.CertPathValidatorException: signature check failed]

Se eu importar o certificado LDAPS às vezes, recebo o erro:

[Root exception is javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: Certificates does not conform to algorithm constraints]

(mesmo depois de comentar java.security)

OU ele começa a funcionar dependendo do programa que usa o JRE; no entanto, o obstáculo comum é que o JRE não parece gostar da cadeia de certificados com base nos erros.

O meu CDP / AIA está disponível internamente por HTTP e todos os certificados são assinados por uma PKI do Windows interna privada de 2 camadas.

openssl s_client -connect -showcerts domain:port

Retorna a cadeia de certificados correta, mas também o erro:

verify error:num=20:unable to get local issuer certificate

O que está evidentemente relacionado a openssl não vendo o certificado raiz, então mesmo com -cafile addendum eu recebo o mesmo erro, o que pode estar dizendo, mas a impressão digital na cadeia de certificados para a raiz Cert é a mesma que a -cafile , então parece que deveria estar certo ...

Neste ponto, estou começando a pensar que 70% de todos os "Como ativar o LDAPS com o Java" estão errados (todos eles certamente se contradizem o suficiente) e que as regras do JAVA CAPS fazem mais sentido para Por que estou sendo obrigado a importar o certificado LDAPS real em vez de confiar apenas no Cert Root. link

Editar: veja a resposta

Então soa como um problema de configuração com meu certificado ou parece que algo específico de Java está acontecendo?

    
por Phatmandrake 14.03.2018 / 23:06

1 resposta

5

Acontece que eu fiz tudo tecnicamente correto em termos de configuração do PKI. Os erros foram porque meus certificados foram assinados com o RSASSA-PSS. O Java 1.8 não suporta o PKCS # 1 v2.1.

Eu tive que gerar novamente toda a cadeia de certificados, da raiz à CA de emissão. Isso exigiu a edição de CAPolicy.inf

AlternateSignatureAlgorithm=1 para 0

Além disso, a linha cmd certutil -setreg ca\csp\alternatesignaturealgorithm 0

Necessário para ser especificado manualmente também.

Parecia um problema de certificado, mas nunca pensei que a compatibilidade de assinaturas fosse o problema. Lição aprendida.

Edição relacionada: Compatibilidade com o provedor de autoridade de certificação da Microsoft

Fontes relacionadas: link

    
por 26.03.2018 / 17:31