Действительно ли возможно настроить WebServiceTemplate с Java keystore?
править
Я ищу способ настроить местоположение keystore в пружинной конфигурации
Я думаю, вы можете программно загрузить хранилище ключей, используя KeyStore.Builder:
Так что, возможно, у вас есть класс, который имеет шаблон веб-службы или расширяет его, а затем задает путь к файлу хранилища ключей в вашей конфигурации Spring и делает его инициализирующим bean-компонентом (@PostConstruct в Spring 3?), Который затем загружает хранилище ключей.
File f = new File(keyStorePath);
KeyStore.Builder builder = KeyStore.Builder.newInstance("type",provider,file,protection);
KeyStore keystore = builder.getKeyStore();
Хорошо - чтобы на самом деле использовать его с вашим шаблоном веб-службы, я думаю, он должен быть основан на обратном вызове хранилища ключей, как описано здесь: http://static.springsource.org/spring-ws/sites/1.5/reference/html /security.html#d0e4462
Или, может быть, с помощью spring org.springframework.ws.transport.http.HttpsUrlConnectionMessageSender, на котором вы можете установить keystoremanager. Тогда это может быть использовано вашим шаблоном веб-сервиса.
Примерно так:
<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>
HTH
Вы должны установить необходимые сертификаты в хранилище ключей (вероятно, в файл cacerts) JDK, используемого для запуска вашего сервера приложений, используя команду keytool.
Вот пример команды:
keytool -import -trustcacerts -alias someAlias -file someCert.crt -keystore yourKeystore
Edit: Исходя из обновленного вопроса, похоже, что это может быть то, что вы ищете: http://static.springsource.org/spring-ws/sites/1.5/reference/html/security.html
Поздно ответил на эту тему, но все равно: обратите внимание, что когда вы создадите хранилище ключей и все остальное, вы можете быть шокированы, обнаружив, что шаблон 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 params в командной строке.
<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);
}
}