web-dev-qa-db-ja.com

javax.naming.CommunicationException:シンプルバインドに失敗しました

単純な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)
15
misguided

質問はもう少し古いですが、かなり一般的です。手短に説明しようとすると:

この問題は、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". 

そのため、セキュリティで保護された接続を確立する前に証明書をインストールするだけです。

16
iCrus

SSLを介したLDAPを使用しようとしています(プロトコル名のLDAP +例外がそれを指している)。証明書がないため、SSLは機能しません。次の2つの選択肢があります。

  1. SSLを使用しないでください
  2. 証明書を適切に構成します。
1
Mark Bramnik

また、次のような同じエラーが発生しました。これが誰かを助けるなら、修正を追加します。

LDAPへの接続中にIBM WAS 8.5から取得しました。

NodeDefaultKeystoreに対して「キーストア名」が選択され、エイリアスが「なし」であることを確認する必要がありました。

SSL証明書とキー管理> SSL構成> NodeDefaultSSLSettings

原因:javax.naming.CommunicationException:simple bind failed:xxxxxx-xxx.xxxxx.xxx:636 [ルート例外はjavax.net.ssl.SSLHandshakeException:ハンドシェイク中にリモートホストが接続を閉じた]

0
Monaj