Lorsque j'ai mis à niveau Java de la version 1.8.161 à la version 1.8.181, je ne parviens pas à me connecter à LDAP depuis mon application.
javax.naming.CommunicationException:: [L'exception racine est javax.net.ssl.SSLHandshakeException: Java.security.cert.CertificateException: Aucun nom alternatif de sujet correspondant à l'adresse IP trouvé]
J'ai trouvé ce qui suit notes de publication sur le site Oracle pour la version 1.8.181
Changements
core-libs/javax.naming ➜ Améliorer le support LDAP L'identification de terminal a été activée sur les connexions LDAPS.
Pour améliorer la robustesse des connexions LDAPS (Secure LDAP over TLS), identification du point de terminaison les algorithmes ont été activés par défaut.
Notez qu'il peut arriver que certaines applications qui étaient auparavant capables de se connecter avec succès sur un serveur LDAPS peut ne plus être en mesure de le faire. De telles applications peuvent, si elles le jugent approprié, désactiver l'identification du point de terminaison à l'aide d'un nouvelle propriété système:
com.Sun.jndi.ldap.object.disableEndpointIdentification
.Définissez cette propriété système (ou définissez-la sur true) pour désactiver les algorithmes d'identification des points d'extrémité.
J'ai essayé de définir la propriété à true comme ci-dessous avec d'autres propriétés. Mais toujours il jette la même erreur.
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY, ctxFactory);
env.put(Context.PROVIDER_URL, providerUrl);
env.put(Context.SECURITY_PRINCIPAL, secPrincipal);
env.put(Context.SECURITY_AUTHENTICATION, secAuthentication);
env.put(Context.SECURITY_CREDENTIALS, secCredentials);
env.put("com.Sun.jndi.ldap.object.disableEndpointIdentification" ,disableEndpointIdentification);
DirContext ldapCtx = new InitialDirContext(env);
Vous avez besoin de votre aide quand et comment nous devons définir la propriété com.Sun.jndi.ldap.object.disableEndpointIdentification
sur true.
Il n’existe pas non plus de variable constante de ce type liée à cela dans l’interface contextuelle.
Si je reviens à la version Java 1.8.161, cela fonctionne bien.
doc parle de la propriété du système d'application et non de l'environnement de contexte Ldap
il doit ensuite être configuré sur l’application JVM (ligne de commande Java) de l’application en tant que
-Dcom.Sun.jndi.ldap.object.disableEndpointIdentification=true
Ajoutez SAN pour votre adresse IP au certificat configuré sur votre serveur LDAP.
par exemple. pour votre configuration de demande de certificat (request.inf)
[RequestAttributes]
SAN="ipaddress=10.233.207.65"
[Extensions]
2.5.29.17 = "{text}"
continue_ = "ipaddress=10.233.207.65"
et pour la génération de certificat quelque chose comme
keyUsage=digitalSignature,keyEncipherment
extendedKeyUsage=serverAuth
subjectKeyIdentifier=hash
subjectAltName=@alt_names
[alt_names]
IP = 10.233.207.65
dans la configuration d'extfile