Java LDAPS:简单绑定失败
我从应用程序连接到LDAP时遇到问题。我已经在JRE密钥库上导入了所有必要的证书 在java.security中输入以下字符串时,我能够调用ldapJava LDAPS:简单绑定失败,java,ssl,ldap,Java,Ssl,Ldap,我从应用程序连接到LDAP时遇到问题。我已经在JRE密钥库上导入了所有必要的证书 在java.security中输入以下字符串时,我能够调用ldap jdk.tls.disabledAlgorithms=MD5, SSLv3, DSA, RSA keySize < 2048 jdk.tls.disabledAlgorithms=MD5、SSLv3、DSA、RSA密钥大小
jdk.tls.disabledAlgorithms=MD5, SSLv3, DSA, RSA keySize < 2048
jdk.tls.disabledAlgorithms=MD5、SSLv3、DSA、RSA密钥大小<2048
当我把这行改成
jdk.tls.disabledAlgorithms=MD5, DSA, DESede, DES_CBC, DHE, RC4, SSLv3, ECDH_anon, DH_anon, NULL, DH keySize < 768, RSA keySize < 2048
jdk.tls.disabledAlgorithms=MD5、DSA、DESede、DESU CBC、DHE、RC4、SSLv3、ECDH_anon、DH_anon、NULL、DH keySize<768、RSA keySize<2048
我的连接失败,出现以下错误:
Caused by: javax.naming.CommunicationException: simple bind failed: testxxxxl.xxxx.com:636 [Root exception is java.net.SocketException: Socket closed]
at com.sun.jndi.ldap.LdapClient.authenticate(LdapClient.java:218)
at com.sun.jndi.ldap.LdapCtx.connect(LdapCtx.java:2740)
at com.sun.jndi.ldap.LdapCtx.<init>(LdapCtx.java:316)
at com.sun.jndi.ldap.LdapCtxFactory.getUsingURL(LdapCtxFactory.java:193)
at com.sun.jndi.ldap.LdapCtxFactory.getUsingURLs(LdapCtxFactory.java:211)
at com.sun.jndi.ldap.LdapCtxFactory.getLdapCtxInstance(LdapCtxFactory.java:154)
at com.sun.jndi.ldap.LdapCtxFactory.getInitialContext(LdapCtxFactory.java:84)
at org.jboss.as.naming.InitialContext.getDefaultInitCtx(InitialContext.java:122)
... 72 more
Caused by: java.net.SocketException: Socket closed
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(SocketInputStream.java:152)
at java.net.SocketInputStream.read(SocketInputStream.java:122)
at sun.security.ssl.InputRecord.readFully(InputRecord.java:442)
at sun.security.ssl.InputRecord.read(InputRecord.java:480)
at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:934)
at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1332)
at sun.security.ssl.SSLSocketImpl.writeRecord(SSLSocketImpl.java:709)
at sun.security.ssl.AppOutputStream.write(AppOutputStream.java:122)
at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:82)
at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:140)
at com.sun.jndi.ldap.Connection.writeRequest(Connection.java:431)
at com.sun.jndi.ldap.Connection.writeRequest(Connection.java:404)
at com.sun.jndi.ldap.LdapClient.ldapBind(LdapClient.java:358)
原因:javax.naming.CommunicationException:简单绑定失败:testxxl.xxxx.com:636[根异常为java.net.SocketException:套接字关闭]
位于com.sun.jndi.ldap.LdapClient.authenticate(LdapClient.java:218)
位于com.sun.jndi.ldap.LdapCtx.connect(LdapCtx.java:2740)
位于com.sun.jndi.ldap.LdapCtx(LdapCtx.java:316)
位于com.sun.jndi.ldap.LdapCtxFactory.getUsingURL(LdapCtxFactory.java:193)
位于com.sun.jndi.ldap.LdapCtxFactory.getUsingURLs(LdapCtxFactory.java:211)
位于com.sun.jndi.ldap.LdapCtxFactory.getLdapCtxInstance(LdapCtxFactory.java:154)
位于com.sun.jndi.ldap.LdapCtxFactory.getInitialContext(LdapCtxFactory.java:84)
位于org.jboss.as.naming.InitialContext.getDefaultInitCtx(InitialContext.java:122)
... 72多
原因:java.net.SocketException:套接字已关闭
位于java.net.SocketInputStream.socketRead0(本机方法)
位于java.net.SocketInputStream.read(SocketInputStream.java:152)
位于java.net.SocketInputStream.read(SocketInputStream.java:122)
位于sun.security.ssl.InputRecord.readFully(InputRecord.java:442)
位于sun.security.ssl.InputRecord.read(InputRecord.java:480)
位于sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:934)
位于sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1332)
位于sun.security.ssl.SSLSocketImpl.writeRecord(SSLSocketImpl.java:709)
位于sun.security.ssl.AppOutputStream.write(AppOutputStream.java:122)
位于java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:82)
位于java.io.BufferedOutputStream.flush(BufferedOutputStream.java:140)
位于com.sun.jndi.ldap.Connection.writeRequest(Connection.java:431)
位于com.sun.jndi.ldap.Connection.writeRequest(Connection.java:404)
位于com.sun.jndi.ldap.LdapClient.ldapBind(LdapClient.java:358)
在wireshark中,它抱怨证书无效。我的问题是,如果我的证书无效,它也不应该使用这条线路
jdk.tls.disabledAlgorithms=MD5, SSLv3, DSA, RSA keySize < 2048
jdk.tls.disabledAlgorithms=MD5、SSLv3、DSA、RSA密钥大小<2048
请帮助我解决此问题。如果您使用到LDAP服务器的安全连接,并且在尝试连接到Active Directory时看到如下错误: 简单绑定失败:ad.hostname.com:636 将LDAP服务器公共证书直接导入Klocwork密钥库(应该是_jvm\lib\security\cacerts)。 这会导致绕过Klocwork端的证书验证过程,因为您已决定通过将LDAP服务器证书导入受信任证书列表来信任该证书
请让LDAP管理员将LDAP服务器证书的此扩展设置为非关键。在最新版本的Java中,TLSv1已被禁用。 在我的例子中,这是在从Java8升级到Java11时发生的。 重新启用TLSv1有帮助。它与定义属性一样简单:
-Djdk.tls.client.protocols=TLSv1
当然,您还需要其他协议,因此您可以指定完整列表:
-Djdk.tls.client.protocols=TLSv1,TLSv1.1,TLSv1.2,TLSv1.3
嗨,谢谢你的回复。我们也向cacerts进口了。还是不行。我不明白禁用的算法参数如何对此产生影响。听起来客户端和服务器无法协商密码套件。当您禁用这些算法时,它们就可以。当客户机和服务器是不同版本的Java时,这种类型的活动会出现一些问题。