O LDAPS está funcionando por meio do ldp.exe e de vários outros programas em sistemas Windows e Linux que parecem não exigir o certificado raiz. de forma alguma. Alguns programas que usam JSSE não conseguem se conectar após importar a CA raiz e intermediária para o armazenamento confiável cacerts.
Testei a importação do certificado LDAPS presente em NTDS\Personal (do AD) diretamente para cacerts e, em certos 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:
[A exceção raiz é javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: falha na validação do caminho PKIX: java.security.cert.CertPathValidatorException: falha na verificação de assinatura]
Se eu importar o certificado LDAPS, às vezes recebo o erro:
[A exceção raiz é javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: os certificados não estão em conformidade com as restrições do algoritmo]
(mesmo depois de comentar java.security)
OUcomeça a funcionar dependendo do programa que usa JRE; entretanto, o obstáculo comum é que o JRE universalmente não parece gostar da cadeia de certificados baseada nos erros.
MY CDP/AIA estão disponíveis por HTTP internamente e todos os certificados são assinados por uma PKI interna privada confiável do Windows 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 ao fato de o openssl não ver o certificado raiz, então, mesmo com -cafile
o adendo, recebo o mesmo erro, o que pode ser revelador, mas a impressão digital na cadeia de certificados do certificado raiz é a mesma, então -cafile
parece que deveria estar certo ...
Neste ponto, estou começando a pensar que 70% de todos os "Como habilitar LDAPS com Java" estão errados (todos certamente se contradizem o suficiente) e que as regras para JAVA CAPS fazem mais sentido por que eu ' Estou sendo obrigado a importar o certificado LDAPS real, em vez de apenas confiar no certificado raiz.https://docs.oracle.com/cd/E19509-01/820-3399/ggfrj/index.html
Editar: veja a resposta
Então, parece um problema de configuração com meu certificado ou algo específico do Java está acontecendo?
Responder1
Acontece que fiz tudo tecnicamente correto em termos de configuração da PKI. Os erros ocorreram porque meus certificados foram assinados com RSASSA-PSS. Java 1.8 não suporta PKCS #1 v2.1.
Tive que regenerar toda a cadeia de certificados, da raiz à CA emissora. Isso exigiu a edição de CAPolicy.inf
AlternateSignatureAlgorithm=1
para0
Também a linha cmd
certutil -setreg ca\csp\alternatesignaturealgorithm 0
Também precisava ser especificado manualmente.
Parecia um problema de certificado, mas nunca pensei que a compatibilidade de assinatura seria o problema. Lição aprendida.
Problema relacionado: Compatibilidade do provedor de autoridade de certificação da Microsoft
Fontes relacionadas: https://pkisolutions.com/pkcs1v2-1rsassa-pss/