2012-10-15 3 views
1

Java 응용 프로그램에서 LDAPS를 사용하여 RedHat 디렉토리 서버/HP UX 디렉토리 서버에 액세스하려면 어떻게합니까? LDAP를 통해 액세스하려고하는데 잘 작동하지만 LDAPS를 사용하는 동안 서버와의 연결이 설정되지 않습니다. 내가 ldap하여 ldaps를 교체 할 경우LDAPS를 통해 Java 코드를 사용하여 RedHat Directory 서버에서 사용자 비밀번호를 재설정하는 방법은 무엇입니까?

public void setPassword(String userDn,String password) { 
    InitialDirContext ctx=null; 
    DirContext connection; 
    Hashtable env = new Hashtable(); 
    env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory"); 
    env.put(Context.SECURITY_AUTHENTICATION, "simple"); 
    String systemname = "ldaps://myserver:636"; 
    env.put(Context.PROVIDER_URL, systemname); 
    env.put(Context.SECURITY_PRINCIPAL, "cn=directory manager"); 
    env.put(Context.SECURITY_CREDENTIALS, "MySecret"); 
    ctx = new InitialDirContext(env); 
    connection = (DirContext)ctx; 
    connection.lookup("dc=mydomain,dc=com"); 
    ModificationItem[] mods = new ModificationItem[1]; 
    Attribute mod0 = new BasicAttribute("userpassword",password); 
    mods[0] = new ModificationItem(DirContext.REPLACE_ATTRIBUTE, mod0); 
    connection.modifyAttributes(userDn, mods); 
    connection.close(); 
} 

위의 코드는 잘 작동 : 여기

가 작동하지 않습니다 내 코드입니다.

하지만 LDAPS에서도 작동하려면 코드가 필요합니다. 일부 사이트에서는 키 저장소, 인증서 등의 필요성을 언급하지만 이러한 항목에 대해서는 알지 못합니다.

+0

"작동하지 않음"은 무엇을 의미합니까? 오류 메시지의 예외가 있습니까? –

+0

은 ssl 포트 '636'이 아닙니까? 단순히 그 문제인 경우 내 대답은 완전한 쓰레기 일 수 있습니다. – Petesh

+0

아니요 포트 번호 '636'에도 작동하지 않습니다. – Arun

답변

1

Java를 사용할 때 서버의 인증서 또는 인증 기관 체인 복사본을 구하여 코드와 함께 사용중인 JVM의 Java 키 스토어에 추가해야합니다.

인증서를 얻는 방법은 사용중인 LDAP 구현에 따라 다릅니다. LDAP 관리자가 도움을 줄 수 있어야합니다.

인증서를 추가하는 방법은 Java KeyStore (Google 참조)입니다.

-jim

2

당신은 몇 가지를 시도 할 수 있습니다 :

  • 사용 알려진 좋은 도구 ldapsearch가 보안 연결을 설정할 수있는 클라이언트를 확인하기 위해 사용 openssl s_client -connect host:port
  • 서버에 연결할 수 LDAP 클라이언트를 확인합니다.