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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Linux上的备用连接上抛出SunCertPathBuilderException的LDAP连接相关的知识,希望对你有一定的参考价值。

我使用以下测试代码连接到ldap服务器。它在windows上运行正常,但是在linux上它连接时我在第一次尝试时运行程序然后在第二次它抛出异常并在第三次尝试它连接成功等等(即奇数执行成功,偶数失败)这很奇怪。我在java默认密钥库中添加了ssl证书。我使用的是java 1.8_161。密钥库位置:“/ 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 main, READ: TLSv1.2 Handshake, length = 1607 1119 *** ServerHello, TLSv1.2建立的,如果通过TLSv1成功:

1200 main, READ: TLSv1 Handshake, length = 2927 1201 *** ServerHello, TLSv1

此外,我已检查证书已过期,TLSv1.2也不支持,但TLSv1是否支持此功能? 。选择TLS协议的行为也是为每个连接选择的吗?

答案

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

以上是关于在Linux上的备用连接上抛出SunCertPathBuilderException的LDAP连接的主要内容,如果未能解决你的问题,请参考以下文章

局域网共享打印机能连接上但不能打印

如何在 iPhone 上的 TCP 连接上禁用 Nagle 算法

关于蓝牙uuid的问题,是否手机软件的uuid和蓝牙芯片上的uuid一样才能连接上啊!我用手机连

连接linux系统mysql数据库 connection time out

Linux并发连接上百万的配置

怎样用 Navicat for MySQL 连接上Linux服务器上配置好的mysql数据库