17

シンプルな 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)
4

2 に答える 2

24

質問は今では少し古いですが、非常に一般的です。それを簡単に説明しようとしています:

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

そのため、安全な接続を確立する前に証明書をインストールするだけで済みます。

于 2013-08-29T10:07:08.193 に答える