UnboundId использует хранилище ключей SSL от Websphere - PullRequest
0 голосов
/ 04 июня 2018

Я работаю над устаревшим приложением, которое всегда использовало UnboundId через соединение без SSL.Наша инфраструктура изменилась, и мне нужно переработать ее в 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.

Я пробовал это, не определяя менеджеры тяги и хранилища ключей вручную, но затем я получаю ошибки цепочки сертификатов повсеместно.

Есть ли способ настроить UnboundIdиспользовать хранилище ключей websphere?

1 Ответ

0 голосов
/ 24 июля 2018

В конце концов нам пришлось остановиться на полуочищенном растворе.Мы используем файлы хранилища ключей, хранящиеся на сервере 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 для этого конкретного хранилища ключей.Это не самое чистое из решений, но оно заставило нас снова работать.Может быть, это поможет другим в будущем

...