web-dev-qa-db-ja.com

Java 1.8.181バージョンのエンドポイント識別を無効にする方法

Java 1.8.161から1.8.181にアップグレードすると、アプリケーションからLDAPに接続できません。以下のユーザーでアプリケーションにログインしようとすると、例外が発生します。 LDAPでアクティブ。

javax.naming.CommunicationException::[ルート例外はjavax.net.ssl.SSLHandshakeExceptionです:Java.security.cert.CertificateException:IPアドレスに一致するサブジェクトの別名が見つかりません]

バージョン1.8.181のOracleサイトで以下の リリースノート を見つけました

変更

core-libs/javax.naming LDAP LDAPサポートの改善LDAPS接続でエンドポイント識別が有効になりました。

LDAPS(Secure LDAP over TLS)接続の堅牢性を向上させるために、エンドポイント識別アルゴリズムはデフォルトで有効になっています。

以前はLDAPSサーバーに正常に接続できた一部のアプリケーションが接続できなくなる場合があることに注意してください。そのようなアプリケーションは、適切であると判断した場合、新しいシステムプロパティcom.Sun.jndi.ldap.object.disableEndpointIdentificationを使用してエンドポイント識別を無効にする場合があります。

このシステムプロパティを定義(またはtrueに設定)して、エンドポイント識別アルゴリズムを無効にします。


他のプロパティと一緒に以下のようにプロパティをtrueに設定しようとしました。しかし、それでも同じエラーがスローされます。

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);

プロパティcom.Sun.jndi.ldap.object.disableEndpointIdentificationをtrueに設定するために必要な方法と場所を確認してください。

コンテキストインターフェイスにも、これに関連するそのような定数のString変数はありません。

Java 1.8.161バージョンに戻すと、正常に動作します。

4
Aravind

docはLdapコンテキスト環境ではなく、アプリケーションシステムプロパティについて説明します

次に、アプリケーションのアプリケーションJVM(Javaコマンドライン)で次のように設定する必要があります。

-Dcom.Sun.jndi.ldap.object.disableEndpointIdentification=true
16
Vadim

LDAPで構成された証明書にIPアドレスのSANを追加します

例えば証明書要求構成(request.inf)

[RequestAttributes]
SAN="ipaddress=10.233.207.65"

[Extensions] 
2.5.29.17 = "{text}" 
continue_ = "ipaddress=10.233.207.65"

と証明書の生成のためのようなもの

keyUsage=digitalSignature,keyEncipherment
extendedKeyUsage=serverAuth
subjectKeyIdentifier=hash
subjectAltName=@alt_names

[alt_names]
IP = 10.233.207.65

extfile構成

0
wvdhaute