Использование WebServiceTemplate с хранилищем ключей

Можно ли настроить WebServiceTemplate с хранилищем java?

изменить
Я ищу способ настройки расположения хранилища ключей в spring config

Ответ 1

Я думаю, что вы можете программно загружать хранилище ключей, используя KeyStore.Builder:

http://java.sun.com/j2se/1.5.0/docs/api/java/security/KeyStore.Builder.html#newInstance%28java.lang.String,%20java.security.Provider,%20java.io.File,%20java.security.KeyStore.ProtectionParameter%29

Итак, возможно, у вас есть класс, который имеет шаблон 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>

НТН

Ответ 2

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

Ответ 3

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

Я не предоставлял кодовую фразу, и я считаю, что это необязательно.

Ответ 4

Поздний ответ на этот поток, но в любом случае: обратите внимание: если у вас есть хранилище ключей и все остальное, вы можете быть шокированы тем, что WebServiceTemplate не поддерживает HTTPS-соединения!

Убедитесь, что для свойства messageSender установлено значение org.springframework.ws.transport.http.CommonsHttpMessageSender. По умолчанию реализация WebServiceMessageSender не поддерживает HTTPS.

Ответ 5

Я предполагаю, что вы хотите настроить хранилище ключей, используемое 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);

    }
}

Ответ 6

Вы должны установить необходимые вам сертификаты в хранилище ключей (возможно, файл 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