java - LDAP 连接在 Linux 上的备用连接上抛出 SunCertPathBuilderException

标签 java linux ssl ldap

我正在使用以下测试代码连接到 ldap 服务器。它在 Windows 上工作正常,但在 Linux 上,当我第一次尝试运行程序时它会连接,然后第二次它会抛出异常,第三次尝试它会成功连接等等(即奇数执行成功,偶数执行失败)这很奇怪。我在 java 默认 keystore 中添加了 ssl 证书。我正在使用 java 1.8_161。 keystore 位置:“/usr/java/jre1.8.0_161/lib/security/cacerts”。我将代码块作为 jar 文件执行。

        Hashtable<String, String> ldapContextDetails = new Hashtable<>();
        ldapContextDetails.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
        ldapContextDetails.put(Context.SECURITY_AUTHENTICATION, "simple");
        ldapContextDetails.put(Context.SECURITY_PRINCIPAL, "username");
        ldapContextDetails.put(Context.SECURITY_CREDENTIALS, "password");
        ldapContextDetails.put(Context.REFERRAL, "follow");
        ldapContextDetails.put("com.sun.jndi.ldap.connect.timeout", "10000");
        ldapContextDetails.put(Context.SECURITY_PROTOCOL, "ssl");

        String providerUrl =  "ldap://domain1.com:636/";
        ldapContextDetails.put(Context.PROVIDER_URL, providerUrl);
        InitialLdapContext ldapContext;
        try {
            ldapContext = new InitialLdapContext(ldapContextDetails, null);
            System.out.println("connected");
        } catch (NamingException e) {
            e.printStackTrace();
        }

更新: 我启用了 ssl 日志,发现在失败的情况下服务器是通过 TLSv1.2 建立的: 1118 主要,阅读:TLSv1.2 握手,长度 = 1607 1119 *** ServerHello,TLSv1.2 如果通过 TLSv1 成功:

1200 main,阅读:TLSv1 握手,长度 = 2927 1201 *** ServerHello,TLSv1

另外我检查过证书已经过期,所以TLSv1.2不支持但TLSv1支持吗? .是否也为每个连接交替选择 TLS 协议(protocol)?

最佳答案

显然,它背后有 2 个 LDAP 服务器,并且必须按照@Eugène Adell 的指示添加两个 LDAP 服务器的证书。

关于java - LDAP 连接在 Linux 上的备用连接上抛出 SunCertPathBuilderException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49254859/

相关文章:

wordpress - Wordpress 的索引页面不受 SSL 保护

java - 我的 Java 代码随机崩溃,需要帮助

java - 构造函数不读取 int[]

linux - 对两个文件使用 diff 并通过电子邮件发送

php - curl errno 35(连接到 [安全站点] :443) 时出现未知 SSL 协议(protocol)错误

ssl - curl: (35) SSL 连接错误

java - 在struts 2对话框中显示错误消息?

bluetooth - Java (J2SE) 和蓝牙

c - 无法在 fork 进程中设置 OpenMP 线程关联

其他用户的 Linux 文件权限