単純なLDAPアプリケーションを使用してLDAPサーバーに接続しようとすると、「単純なバインドに失敗しました」というエラーが表示されます。これは何らかのBINDに関連していると思います。別のアプリケーションのプロパティファイルの1つにバインドプロパティがありますが、そのプロパティをこのプログラムに渡す方法がわかりません。
さらに詳細を追加する必要がありますか?
コード
import javax.naming.directory.*;
import javax.naming.*;
import Java.util.Vector;
import Java.util.Enumeration;
import Java.util.Properties;
public class SearchLDAP {
public static void main(String[] args) {
String base = "";
String filter = "(objectclass=*)";
Properties env = new Properties();
env.put(DirContext.INITIAL_CONTEXT_FACTORY,"com.Sun.jndi.ldap.LdapCtxFactory");
env.put(DirContext.PROVIDER_URL,"ldaps://misguided.com.au:343");
try {
System.out.println("11");
DirContext dc = new InitialDirContext(env);
System.out.println("22");
SearchControls sc = new SearchControls();
sc.setSearchScope(SearchControls.OBJECT_SCOPE);
NamingEnumeration ne = null;
ne = dc.search(base, filter, sc);
while (ne.hasMore()) {
SearchResult sr = (SearchResult) ne.next();
System.out.println(sr.toString()+"\n");
}
dc.close();
} catch (NamingException nex) {
System.err.println("Error: " + nex.getMessage());
nex.printStackTrace();
}
}
}
私が得ているエラーは
エラー
11
Error: simple bind failed: XXXX.XXX.XXXX.net:808
javax.naming.CommunicationException: simple bind failed: misguided.com.au:343 [Root exception is javax.net.ssl.SSLHandshakeException: Sun.security.validator.ValidatorException: PKIX path building failed: Sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target]
at com.Sun.jndi.ldap.LdapClient.authenticate(LdapClient.Java:215)
at com.Sun.jndi.ldap.LdapCtx.connect(LdapCtx.Java:2740)
at com.Sun.jndi.ldap.LdapCtx.<init>(LdapCtx.Java:316)
at com.Sun.jndi.ldap.LdapCtxFactory.getUsingURL(LdapCtxFactory.Java:193)
質問はもう少し古いですが、かなり一般的です。手短に説明しようとすると:
この問題は、JREキーストアにSSL証明書がないために発生します。
LDAPSまたはHTTPS接続の場合、Javaランタイムは、相手側のサーバーとのセキュアな接続を作成するために、それぞれのSSL証明書を使用する必要があります。
キーストアからSSL証明書を取得するには、まず証明書をJavaキーストアにインストールする必要があります。「keytool」コマンドは、Javaキーストア。
keytool –import -file adserv.crt -keystore <location to keystore>
その行方不明のとき、あなたは得る:
"Sun.security.provider.certpath.SunCertPathBuilderException:
unable to find valid certification path to requested target".
そのため、セキュリティで保護された接続を確立する前に証明書をインストールするだけです。
SSLを介したLDAPを使用しようとしています(プロトコル名のLDAP +例外がそれを指している)。証明書がないため、SSLは機能しません。次の2つの選択肢があります。
また、次のような同じエラーが発生しました。これが誰かを助けるなら、修正を追加します。
LDAPへの接続中にIBM WAS 8.5から取得しました。
NodeDefaultKeystoreに対して「キーストア名」が選択され、エイリアスが「なし」であることを確認する必要がありました。
SSL証明書とキー管理> SSL構成> NodeDefaultSSLSettings
原因:javax.naming.CommunicationException:simple bind failed:xxxxxx-xxx.xxxxx.xxx:636 [ルート例外はjavax.net.ssl.SSLHandshakeException:ハンドシェイク中にリモートホストが接続を閉じた]