前一段时间接到一个修改windows ad域密码的需求,也是第一次接触ad域操作的需求,特记录在博客以备后需,也希望能给有需要的朋友提供一点点解决问题的思路。
根据windows帮助文档说明,修改ad域密码是需要使用ssl认证方式。https://support.microsoft.com/zh-cn/help/269190/how-to-change-a-windows-active-directory-and-lds-user-password-through
在实现的过程中,先通过将证书到java证书库,然后使用ssl认证方式修改密码报异常,最后才选择修改socket连接信任所有证书的形式。
导入证书到java证书库所借鉴文章地址:https://blog.csdn.net/hc1017/article/details/81293323
修改socket连接信任所有证书借鉴文章地址:https://my.oschina.net/qiaojj/blog/2251630
一、主要代码
1.自定义socket连接信任所有证书类
package main.util;
import java.io.IOException;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
import javax.net.SocketFactory;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.TrustManager;
/**
* 自定义 SSLSocketFactory
*/
public class DummySSLSocketFactory extends SSLSocketFactory {
private SSLSocketFactory factory;
public DummySSLSocketFactory() {
try {
SSLContext sslcontext = SSLContext.getInstance("TLS");
sslcontext.init( null, // No KeyManager required
new TrustManager[] { new DummyTrustManager()},
new java.security.SecureRandom());
factory = ( SSLSocketFactory) sslcontext.getSocketFactory();
} catch( Exception ex) { ex.printStackTrace(); }
}
public static SocketFactory getDefault() {
return new DummySSLSocketFactory();
}
@Override
public Socket createSocket(Socket arg0, String arg1, int arg2, boolean arg3)
throws IOException {
// TODO Auto