在ssl(ldaps)的支持下连接活动目录
我试图在ssl的支持下与活动目录连接。
我尝试了以下网站的步骤。
http://confluence.atlassian.com/display/CROWD/Configuring+an+SSL+Certificate+for+Microsoft+Active+Directory
当我尝试从java代码连接活动目录时,它会出现以下错误。
Exception in thread "main" javax.naming.CommunicationException: simple bind fail ed: 172.16.12.4:636 [Root exception is java.net.SocketException: Connection rese t] at com.sun.jndi.ldap.LdapClient.authenticate(Unknown Source) at com.sun.jndi.ldap.LdapCtx.connect(Unknown Source) at com.sun.jndi.ldap.LdapCtx.(Unknown Source) at com.sun.jndi.ldap.LdapCtxFactory.getUsingURL(Unknown Source) at com.sun.jndi.ldap.LdapCtxFactory.getUsingURLs(Unknown Source) at com.sun.jndi.ldap.LdapCtxFactory.getLdapCtxInstance(Unknown Source) at com.sun.jndi.ldap.LdapCtxFactory.getInitialContext(Unknown Source) at javax.naming.spi.NamingManager.getInitialContext(Unknown Source) at javax.naming.InitialContext.getDefaultInitCtx(Unknown Source) at javax.naming.InitialContext.init(Unknown Source) at javax.naming.InitialContext.(Unknown Source) at javax.naming.directory.InitialDirContext.(Unknown Source) at ConnectActiveDirectory.main(ConnectActiveDirectory.java:39) Caused by: java.net.SocketException: Connection reset at java.net.SocketInputStream.read(Unknown Source) at com.sun.net.ssl.internal.ssl.InputRecord.readFully(Unknown Source) at com.sun.net.ssl.internal.ssl.InputRecord.read(Unknown Source) at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(Unknown Source) at com.sun.net.ssl.internal.ssl.SSLSocketImpl.waitForClose(Unknown Sourc e) at com.sun.net.ssl.internal.ssl.HandshakeOutStream.flush(Unknown Source) at com.sun.net.ssl.internal.ssl.Handshaker.kickstart(Unknown Source) at com.sun.net.ssl.internal.ssl.SSLSocketImpl.kickstartHandshake(Unknown Source) at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(Un known Source) at com.sun.net.ssl.internal.ssl.SSLSocketImpl.writeRecord(Unknown Source ) at com.sun.net.ssl.internal.ssl.AppOutputStream.write(Unknown Source) at java.io.BufferedOutputStream.flushBuffer(Unknown Source) at java.io.BufferedOutputStream.flush(Unknown Source) at com.sun.jndi.ldap.Connection.writeRequest(Unknown Source) at com.sun.jndi.ldap.Connection.writeRequest(Unknown Source) at com.sun.jndi.ldap.LdapClient.ldapBind(Unknown Source) ... 13 more
正在使用的代码是
import java.util.Hashtable; import javax.naming.*; import javax.naming.directory.*; public class ConnectActiveDirectory { public static void main(String[] args) throws NamingException { Hashtable env = new Hashtable(); env.put(Context.SECURITY_AUTHENTICATION, "simple"); env.put(Context.SECURITY_PRINCIPAL,"Administrator@mysite.com"); env.put(Context.SECURITY_CREDENTIALS, "password"); env.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory"); env.put(Context.PROVIDER_URL, "ldaps://172.16.12.4:636/cn=Users,dc=mysite,dc=com"); try{ java.io.InputStream in = new java.io.FileInputStream("C:\\client.crt"); java.security.cert.Certificate c = java.security.cert.CertificateFactory.getInstance("X.509").generateCertificate(in); java.security.KeyStore ks = java.security.KeyStore.getInstance("JKS"); ks.load(null); if (!ks.containsAlias("alias ldap")) { ks.setCertificateEntry("alias ldap", c); } java.io.OutputStream out = new java.io.FileOutputStream("C:\\keystorefile.jks"); char[] kspass = "changeit".toCharArray(); ks.store(out, kspass); out.close(); }catch(Exception e){ e.printStackTrace(); } System.setProperty("javax.net.ssl.trustStore", "C:\\keystorefile.jks"); DirContext ctx = new InitialDirContext(env); NamingEnumeration enm = ctx.list(""); while (enm.hasMore()) { System.out.println(enm.next()); } ctx.close(); } }
我有没有做错?
我在哪里可以获得与活动目录进行ssl连接的良好教程?
http://confluence.atlassian.com/display/CROWD/Configuring+an+SSL+Certificate+for+Microsoft+Active+Directory网站是否有正确的步骤来创建和连接ssl的活动目录?
请帮助我。
我的AD域名重命名后,我遇到了类似的问题。 重新安装证书服务后,您需要删除并重新颁发颁发给域控制器的证书。 脚步:
- 打开MMC
- 添加管理单元>证书>计算机>本地计算机
- 导航到“个人”>“证书”
- 删除发给这台机器的所有旧证书(在我的情况下,这些是由旧CA颁发的)
- 右键单击“证书”文件夹,单击“申请新证书”。
- 按照步骤将新证书颁发给域控制器。
- 重新启动(不确定是否有必要,但我在它工作之前重新启动)
我使用Atlassian Crowd和Active Directory通过SSL获得了相同的错误消息。 它不适用于这个特定的问题,但是当我试图找出发生了什么时,这个post是第一次谷歌搜索命中,所以我会在这里写下来。
在我的情况下,我首先测试没有SSL,然后更改为SSL。 结果我忘了更改Crowd Connector设置中使用的协议。
之前:ldap://:389之后:ldaps://:636
无意中使用ldap://:636给了我“连接重置”错误。
- 使用Spring Security 3.2,Spring Ldap 2.0和JavaConfig进行Active Directory身份validation
- Java SSO:针对Active Directory的Kerberos身份validation
- 在Java中使用LDAP的最简单方法(Eclipse)
- 使用LDAP / Java启用Active Directory用户
- 通过Java执行ADS相关的Powershell命令在使用2种不同方式时不会产生2种不同的错误
- 如何使用Spring Security对Active Directory服务器进行身份validation?
- 为什么JDK1.8.0u121无法找到kerberos default_tkt_enctypes类型? (KrbException:default_tkt_enctypes没有支持的默认etypes)
- 用户解锁后,Windows机器上的Kerberos缓存票证无法重新生成
- 我可以从LDAP更改自己的Active Directory密码(没有管理帐户)