2015-06-14 2 views
0

В очень старом проекте мы используем клиент, разработанный с Axis 1.4 для вызова веб-службы SOAP. Этот веб-сервис использует механизм взаимной аутентификации, поэтому у нас есть закрытый сертификат, установленный внутри хранилища ключей, и открытый ключ, установленный внутри доверительного хранилища.Как программно установить контекст SSL для клиента Axis?

Клиент SOAP используется внутри задачи BPM-процесса. Мы не можем, и мы не хотим использовать глобальный траст доверия и хранилище ключей JVM. Тогда мы не можем настроить программно JVM глобальной trustore и хранилище ключей:

// Keystore 
System.setProperty("javax.net.ssl.keyStore", fileKeystore); 
System.setProperty("javax.net.ssl.keyStorePassword", pwdKeystore); 
System.setProperty("javax.net.ssl.keyStoreType", "PKCS12"); 
// Truststore 
System.setProperty("javax.net.ssl.trustStore", fileTruststore); 
System.setProperty("javax.net.ssl.trustStorePassword", pwdTruststore); 
System.setProperty("javax.net.ssl.trustStoreType", "JKS"); 

подход как это заставит нас синхронизировать процесс на свойствах виртуальной машины Java, и мы не хотим, чтобы сделать это. Кроме того, на машине есть другие процессы java.

Мой вопрос: Does Axis 1.4 предлагает API, чтобы указать, какое хранилище ключей и доверительное хранилище использовать для определенного вызова веб-службы?

ответ

3

Хорошо, немного погуляю. Я нашел ответ на свой вопрос. Ответ заключается в том, что, используя исключительно Axis 1.4, невозможно указать другое хранилище ключей/доверительное хранилище для каждого вызова службы. Нам нужна внешняя библиотека, называемая axistools.

Библиотека реализует особый вид EngineConfiguration, который позволяет указать для каждого вызова службы хранилище ключей и/или доверительный магазин.

Следующий пример будет поясняющим:

// Setting up the configuration 
SSLClientAxisEngineConfig config = new SSLClientAxisEngineConfig(); 
config.setKeystore("path/to/your/keystore"); 
config.setKeystoreType("JKS"); 
config.setKeystorePassword("password"); 
config.setTruststore("path/to/your/truststore"); 
config.setTruststoreType("JKS"); 
config.setTruststorePassword("password"); 
// Very important: without this method invocation 
// the client won't work at all 
config.initialize(); 

// Calling the web service 
URL url = new URL("https://localhost:8443/someService"); 
WebServiceLocator locator = new WebServiceLocator (config); 
WebServiceSoap port = locator.getWebServiceSoap(url); 
WebServiceSoapStub stub = (WebServiceSoapStub) port; 
stub.serviceMethod(); 

И это все, ребята !!!

+0

http://mvnrepository.com/artifact/org.codehaus.mojo/axistools-maven-plugin/1.4 jar не имеет указанного класса SSLClientAxisEngineConfig. Можете ли вы дать правильную зависимость от maven –

+0

О, черт возьми, вы правильно! Попробуйте загрузить библиотеку из [здесь] (https://github.com/linhkuivanen/axistools) или из [здесь] (http://www.java2s.com/Code/Jar/a/Downloadaxisssl14jar.htm). Дай мне знать. –

+0

Класс SSLClientAxisEngineConfig отличается в банках указанным.config.initialize(); не существует в последнем. Я попробовал последний, но я получаю «неспособный получить действительный путь сертификации» –

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