首页 > 解决方案 > LDAPS:简单绑定失败

问题描述

我在从我的应用程序连接到 LDAPS 时遇到问题。我已经在 J​​RE 密钥库上导入了所有必要的证书。

当我将以下字符串放入 java.security 时,我可以调用 LDAP

jdk.tls.disabledAlgorithms=MD5, SSLv3, DSA, RSA keySize < 2048

当我将此行更改为

jdk.tls.disabledAlgorithms=MD5, DSA, DESede, DES_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)

在wireshark它抱怨证书无效。我的问题是如果我的证书无效,它也不应该与这条线一起工作。

jdk.tls.disabledAlgorithms=MD5, SSLv3, DSA, RSA keySize < 2048

请帮我解决问题。

标签: javasslldap

解决方案


如果您使用与 LDAP 服务器的安全连接,并且在尝试连接到 Active Directory 时看到如下错误: simple bind failed: ad.hostname.com:636 将 LDAP 服务器公共证书直接导入 Klocwork 密钥库(其中应该是_jvm\lib\security\cacerts)。这会导致绕过 Klocwork 端的证书验证过程,因为您已决定通过将 LDAP 服务器证书导入您的受信任证书列表来信任它。

请您的 LDAP 管理员将此 LDAP 服务器证书的扩展名设置为非关键。


推荐阅读