AD域证书申请,导入Java密钥库,实现ldap修改AD用户密码这篇文章
楼主,两个证书我都导入了,然后你的测试代码运行也没有报错,可就是密码没有成功被修改,这是怎么回事
参考这篇文章试一下
https://www.cnblogs.com/huanghongbo/p/12409209.html
参考阿里云社区 https://developer.aliyun.com/article/118657
JAVA修改AD域密码
Hashtable env = new Hashtable();
System.setProperty("javax.net.ssl.trustStore", KEYSTORE);
System.setProperty("javax.net.ssl.trustStorePassword", KEYSTORE_PWD);
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.SECURITY_AUTHENTICATION, "simple");
env.put(Context.SECURITY_PRINCIPAL, ADMIN_NAME);
env.put(Context.SECURITY_CREDENTIALS, ADMIN_PASSWORD);
env.put(Context.SECURITY_PROTOCOL, "ssl");
env.put(Context.PROVIDER_URL, LDAP_SSL_URL);
try {
ctx = new InitialLdapContext(env, null);//new InitialDirContext(HashEnv);// 初始化上下文
} catch (AuthenticationException e) {
System.out.println("身份验证失败!"+e.toString());
e.printStackTrace();
} catch (CommunicationException e) {
System.out.println("AD域连接失败!"+e.toString());
e.printStackTrace();
} catch (Exception e) {
System.out.println("身份验证未知异常!"+e.toString());
e.printStackTrace();
} finally{
return ctx;
}
检查一下配置是否正确
导入的证书和密钥库文件的权限正确
ls -l /path/to/keyring
对于修改AD域用户密码,需要注意以下几点:
在AD域中修改域控账号密码,可以使用Java的LDAP(轻型目录访问协议)来实现。下面是一个简单的示例代码,可以使用LDAP连接到AD域,并修改特定用户的密码:
import javax.naming.Context;
import javax.naming.directory.*;
import javax.naming.ldap.InitialLdapContext;
import javax.naming.ldap.LdapContext;
import java.util.Hashtable;
public class ActiveDirectoryPasswordChanger {
public static void main(String[] args) {
String username = "your_username";
String oldPassword = "your_old_password";
String newPassword = "your_new_password";
String ldapUrl = "ldap://your_domain_controller:389";
String ldapUserDn = "your_user_dn";
// Set up the environment for creating the initial context
Hashtable<String, Object> env = new Hashtable<>();
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, ldapUrl);
env.put(Context.SECURITY_AUTHENTICATION, "simple");
env.put(Context.SECURITY_PRINCIPAL, ldapUserDn);
env.put(Context.SECURITY_CREDENTIALS, oldPassword);
try {
// Create the initial context
LdapContext ctx = new InitialLdapContext(env, null);
// Specify the changes to make
ModificationItem[] mods = new ModificationItem[1];
mods[0] = new ModificationItem(DirContext.REPLACE_ATTRIBUTE, new BasicAttribute("unicodePwd", newPassword.getBytes("UTF-16LE")));
// Modify the user password
ctx.modifyAttributes("CN=" + username, mods);
System.out.println("Password successfully changed.");
// Close the context
ctx.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
注意事项: 1. 请替换代码中的"your_username","your_old_password","your_new_password","your_domain_controller","your_user_dn"等为实际值。 2. 这段代码需要在具有访问AD域修改密码权限的用户账号下执行。 3. 代码中使用的密码修改操作需要使用UTF-16LE编码的密码,因此需要将Java中的字符串密码转换为字节数组并使用UTF-16LE编码。
请注意,这只是一个简单的示例代码,实际使用中可能需要根据具体情况进行更多的错误处理和参数验证。
检查下是否已经正确地配置了LDAP客户端,并且可以连接到AD服务器。详细的代码可以参考:
JAVA修改AD域密码_免证书认证:http://t.zoukankan.com/huanghongbo-p-12409209.html
或者这个代码:
JAVA修改AD域密码_免证书认证:https://www.cnblogs.com/huanghongbo/p/12409209.html
验证一下 LDAP 是否连接成功