Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何通过LDAPS使用Java代码重置RedHat Directory server中的用户密码?_Java_Ldap_Redhat_Hp Ux_Directory Server - Fatal编程技术网

如何通过LDAPS使用Java代码重置RedHat Directory server中的用户密码?

如何通过LDAPS使用Java代码重置RedHat Directory server中的用户密码?,java,ldap,redhat,hp-ux,directory-server,Java,Ldap,Redhat,Hp Ux,Directory Server,如何使用Java应用程序中的LDAP访问RedHat directory server/HP UX directory server?我试图通过LDAP访问它,它工作正常,但使用LDAPS时,它无法与服务器建立连接 这是我的代码,它不起作用: public void setPassword(String userDn,String password) { InitialDirContext ctx=null; DirContext connection; Hashtabl

如何使用Java应用程序中的LDAP访问RedHat directory server/HP UX directory server?我试图通过LDAP访问它,它工作正常,但使用LDAPS时,它无法与服务器建立连接

这是我的代码,它不起作用:

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();
}
如果将
ldap
替换为
ldap
,则上述代码可以正常工作


但我也需要为LDAP工作的代码。有些网站提到需要密钥库、证书等,但我对此一无所知

您可以尝试以下几种方法:

  • 使用已知良好的工具
    ldapsearch
    验证LDAP客户端是否可以连接到服务器
  • 使用openssl s_客户端-连接主机:端口验证客户端是否可以建立安全连接

在使用Java时,您需要获取服务器证书或证书颁发机构链的副本,并将其添加到代码中使用的JVM的Java密钥库中

如何获得证书取决于您使用的LDAP实现。LDAP管理员应该能够提供帮助

关于在Java密钥库中添加证书,请参见Google


-吉姆,“不工作”是什么意思?您是否收到任何异常错误消息?ssl端口不是“636”吗?我的答案可能完全是胡说八道,如果问题不在于端口号“636”也不起作用的话。它抛出以下异常:javax.naming.CommunicationException:hpuxserver1:636[根异常是java.net.ConnectException:Connection timed out:connect],位于com.sun.jndi.ldap.Connection.(Connection.java:200)导致:java.net.ConnectException:连接超时:java.net.PlainSocketImpl.socketConnect(本机方法)处的java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:351)处的java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:213)处的java.net.Socket.connect(Socket.java:529)所以防火墙没有打开636端口。