Можно ли настроить WebServiceTemplate с хранилищем java?
изменить
Я ищу способ настройки расположения хранилища ключей в spring config
Можно ли настроить WebServiceTemplate с хранилищем java?
изменить
Я ищу способ настройки расположения хранилища ключей в spring config
Я думаю, что вы можете программно загружать хранилище ключей, используя KeyStore.Builder:
Итак, возможно, у вас есть класс, который имеет шаблон webservice или расширяет его, а затем задает путь файла хранилища ключей к нему в вашей конфигурации spring и делает его инициализацией bean (@PostConstruct in spring 3?), который затем загружает хранилище ключей.
File f = new File(keyStorePath);
KeyStore.Builder builder = KeyStore.Builder.newInstance("type",provider,file,protection);
KeyStore keystore = builder.getKeyStore();
Хорошо - фактически использовать его с вашим webservicetemplate. Думаю, он должен основываться на обратном вызове хранилища ключей, как описано здесь: http://static.springsource.org/spring-ws/sites/1.5/reference/html/security.html#d0e4462
Или, может быть, с помощью spring org.springframework.ws.transport.http.HttpsUrlConnectionMessageSender, на который вы можете установить keystoremanager. Затем это может быть использовано в вашей webservicetemplate.
Немного похоже на это:
<bean id="template" class="org.springframework.ws.client.core.WebServiceTemplate">
<property name="messageSender">
<bean class="org.springframework.ws.transport.http.HttpsUrlConnectionMessageSender">
<property name=""></property>
</bean>
</property>
</bean>
НТН
Я отправляю этот ответ через шесть лет, но, честно говоря, нет ни одного сообщения, где предоставляется полное и сжатое решение. Все, что вам нужно, это spring -ws-core (2.1.4.RELEASE +) и spring -we-security (2.2.4.RELEASE +) зависимости. Следующий шаг - настроить пользовательские хранилища ключей и truststore как beans, а затем ввести их в шаблон веб-службы в конфигурации spring.
<bean id="myKeyStore" class="org.springframework.ws.soap.security.support.KeyStoreFactoryBean">
<property name="location" value="file:/tmp/config/my-keystore.jks"/>
<property name="password" value="password"/>
</bean>
<bean id="myTrustStore" class="org.springframework.ws.soap.security.support.KeyStoreFactoryBean">
<property name="location" value="file:/tmp/config/my-truststore.jks"/>
<property name="password" value="different_password"/>
</bean>
<bean id="template" class="org.springframework.ws.client.core.WebServiceTemplate">
<property name="messageSender">
<bean class="org.springframework.ws.transport.http.HttpsUrlConnectionMessageSender">
<property name="trustManagers">
<bean class="org.springframework.ws.soap.security.support.TrustManagersFactoryBean">
<property name="keyStore" ref="mytrustStore" />
</bean>
</property>
<property name="keyManagers">
<bean class="org.springframework.ws.soap.security.support.KeyManagersFactoryBean">
<property name="keyStore" ref="myKeyStore" />
<property name="password" value="password" />
</bean>
</property>
</bean>
</property>
</bean>
Ответы и вопросы, которые я нашел в этом посте, заставляли меня некоторое время преследовать мой хвост. В итоге я получил эту работу для приложения, которое я развернул в WebLogic 11g, импортировав хранилище ключей в хранилище ключей на моем сервере Weblogic:
C:\bea\jrockit_160_14_R27.6.5-32\jre\bin > keytool -importkeystore -srckeystore\workspace\myProject\webservice.keystore
Затем я изменил конфигурацию хранилища ключей WebLogic, чтобы указать на это хранилище ключей. Вы можете сделать это через консоль WL: Environment- > Servers- > AdminServer- > Keystores. Измените параметр Keystores: "Пользовательский идентификатор и пользовательский траст" , затем введите путь в Идентификация (входящий) и Trust ( исходящие) в ваше хранилище ключей. В Windows XP моя была в \Documents and Settings\my id \.keystore.
Я не предоставлял кодовую фразу, и я считаю, что это необязательно.
Поздний ответ на этот поток, но в любом случае: обратите внимание: если у вас есть хранилище ключей и все остальное, вы можете быть шокированы тем, что WebServiceTemplate не поддерживает HTTPS-соединения!
Убедитесь, что для свойства messageSender
установлено значение org.springframework.ws.transport.http.CommonsHttpMessageSender
. По умолчанию реализация WebServiceMessageSender
не поддерживает HTTPS.
Я предполагаю, что вы хотите настроить хранилище ключей, используемое JSSE, поскольку это будет использовать шаблон. JSSE всегда будет искать свойства системы javax.net.ssl.keyStore/javax.net.ssl.keyStorePassword, чтобы найти хранилище ключей. Вы можете настроить эти свойства в Spring, используя InitializingBean, как это.
Обратите внимание, что если вы работаете на сервере приложений, JSSE может быть настроен до инициализации Spring. В этом случае вам нужно использовать интерфейс сервера приложений для установки хранилища ключей - обычно с использованием параметров -D в командной строке.
<bean id="jsseInitializer" lazy-init="false" class="com.blah.JsseInitializer">
<property name="trustStoreLocation" value="${pnet.batch.trustStore.location}"/>
<property name="trustStorePassword" value="${pnet.batch.trustStore.password}"/>
<property name="keyStoreLocation" value="${pnet.batch.keyStore.location}"/>
<property name="keyStorePassword" value="${pnet.batch.keyStore.password}"/>
</bean>
public class JsseInitializer implements InitializingBean {
private String trustStoreLocation;
private String trustStorePassword;
private String keyStoreLocation;
private String keyStorePassword;
public String getTrustStoreLocation() {
return trustStoreLocation;
}
public void setTrustStoreLocation(String trustStoreLocation) {
this.trustStoreLocation = trustStoreLocation;
}
public String getTrustStorePassword() {
return trustStorePassword;
}
public void setTrustStorePassword(String trustStorePassword) {
this.trustStorePassword = trustStorePassword;
}
public String getKeyStoreLocation() {
return keyStoreLocation;
}
public void setKeyStoreLocation(String keyStoreLocation) {
this.keyStoreLocation = keyStoreLocation;
}
public String getKeyStorePassword() {
return keyStorePassword;
}
public void setKeyStorePassword(String keyStorePassword) {
this.keyStorePassword = keyStorePassword;
}
public void afterPropertiesSet() throws Exception {
System.setProperty("javax.net.ssl.trustStore", trustStoreLocation);
System.setProperty("javax.net.ssl.trustStorePassword", trustStorePassword);
System.setProperty("javax.net.ssl.keyStore", keyStoreLocation);
System.setProperty("javax.net.ssl.keyStorePassword", keyStorePassword);
}
}
Вы должны установить необходимые вам сертификаты в хранилище ключей (возможно, файл cacerts) JDK, используемого для запуска вашего сервера приложений, используя команду keytool.
Вот пример команды:
keytool -import -trustcacerts -alias someAlias -file someCert.crt -keystore yourKeystore
Изменить. Исходя из обновленного вопроса, похоже, что это может быть то, что вы ищете: http://static.springsource.org/spring-ws/sites/1.5/reference/html/security.html