UnboundId 使用来自 Websphere 的 SSL KeyStore

UnboundId use the SSL KeyStore from Websphere

我正在开发一个遗留应用程序,该应用程序始终通过 none SSL 连接使用 UnboundId。我们的基础架构已更改,我需要将其重新设计为 SSL。所以我把代码改成了下面的

        KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType());
        trustStore.load(null);
        FileInputStream fin1 = new FileInputStream("D:/mycert.cer");
        CertificateFactory cf = CertificateFactory.getInstance("X.509");
        int i = 0;
        Certificate cert = cf.generateCertificate(fin1);
        trustStore.setCertificateEntry("cert " + i++, cert);
        TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
        trustStore.load(null);
        tmf.init(trustStore);
        TrustManager[] trustManagers = tmf.getTrustManagers();

        SSLUtil sslUtil = new SSLUtil(trustManagers);
        sslUtil.setDefaultSSLProtocol("TLSv1");
        SSLSocketFactory sslServerSocketFactory = sslUtil.createSSLSocketFactory();
        LDAPConnection connection = new LDAPConnection(sslServerSocketFactory, server, port, user, password);

此代码有效。然而,我们在 Websphere 上 运行 并且所有证书都位于 Websphere 密钥库中。在这种情况下,我下载了证书并从文件系统或资源中加载它。这不是我们想要的。我们要使用Websphere的keystore。

我在没有手动定义 thrustmanagers 和 keystores 的情况下尝试了这个,但后来到处都是证书链接错误。

有什么方法可以配置 UnboundId 以使用 websphere 密钥库吗?

我们最终不得不采用半清洁解决方案。我们使用 websphere 服务器存储的密钥库文件作为代码的输入。

        KeyStore trustStore = KeyStore.getInstance(trustStoreType);
        File file = new File(keystoreLocation);
        if(file.exists()){
            FileInputStream keystoreFile = new FileInputStream(keystoreLocation);
            trustStore.load(keystoreFile, keystorePassword.toCharArray());
            TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
            tmf.init(trustStore);
            TrustManager[] trustManagers = tmf.getTrustManagers();

            SSLUtil sslUtil = new SSLUtil(trustManagers);
            sslUtil.setDefaultSSLProtocol(sslProtocol);
            SSLSocketFactory sslServerSocketFactory = sslUtil.createSSLSocketFactory();
            LDAPConnection connection = new LDAPConnection(sslServerSocketFactory, server, port, user, password);
            return connection;
        } else {
            throw new TechnicalException("Keystore not found");
        }

注意 keystoreLocation 这基本上是来自 websphere 的密钥库文件,kesystorePassword.toCharArray() 是该特定密钥库的 websphere 密码。这不是最干净的解决方案,但它让我们重新开始。也许这对以后的其他人有帮助