2016-02-10 8 views
2

нашему Wildfly 8.1-серверу необходимо установить исходящее (!) LDAPS-подключение к серверу в сети организации. Это соединение используется только для синхронизации различных данных приложения. К сожалению, нет документации о том, что Wildfly имеет только трафик, предназначенный только для исходящих. Каждое исследование, которое я только что даю, дает мне результаты по включению SSL для входящих соединений.Исходящее (!) SSL-соединение Wildfly

Как я могу добавить сертификат в хранилище Wildfly для исходящих SSL-соединений? Есть ли документация об этом? Я был бы благодарен за любую помощь по этой теме.

+0

Планируете ли вы использовать какой-либо сервис Wildfly, чтобы установить соединение? –

+0

Нет, это не обязательно. Одного компонента достаточно. – PeteSabacker

+0

Возможно, поместите свой сертификат в файл jar или что-то еще? То, что я получаю, это то, что я считаю, что для Java-клиента SSL требуется только параметр свойства для файла. Я не думаю, что он должен специально взаимодействовать с контейнером. Я не знаю, есть ли у контейнера «Trust Service», но я признаю, что я никогда не играл с этими файлами. –

ответ

1

Найдено два возможных решения. Сначала один я бы не использовать:

System.setProperty("javax.net.ssl.trustStore",path_to_your_cacerts_file); 

второй я бы предпочел:

public class LDAPSSocketFactory extends SSLSocketFactory { 

private SSLSocketFactory actualSocketFactory; 

public LDAPSSocketFactory() { 

    InputStream certificateInputStream = this.getClass().getClassLoader().getResourceAsStream("yourcert.pfx"); 

    try { 

     KeyStore pkcs12 = KeyStore.getInstance("pkcs12"); 

     pkcs12.load(certificateInputStream, "".toCharArray()); 

     TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm()); 

     tmf.init(pkcs12); 

     SSLContext ctx = SSLContext.getInstance("TLS"); 

     ctx.init(null, tmf.getTrustManagers(), null); 

     actualSocketFactory = ctx.getSocketFactory(); 

    } catch (KeyStoreException e) { 
     e.printStackTrace(); 
    } catch (CertificateException e) { 
     e.printStackTrace(); 
    } catch (NoSuchAlgorithmException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } catch (KeyManagementException e) { 
     e.printStackTrace(); 
    } 

} 

//Override methods by simply deligating them to the actualSocketFactory 

} 

И передать это как JNDI парам для Ldap соединений:

env.put("java.naming.ldap.factory.socket", "LDAPSSocketFactory"); 

Найдено всего из этого в StackOverflow, но я забыл, где именно, поэтому я в основном вложил их решение здесь.

+0

Любой из них должен быть для вас решением - WildFly не участвует в управлении исходящими соединениями для вас, когда вы сами вызываете API. –

Смежные вопросы