Используя WebServiceTemplate с keystore

Действительно ли возможно настроить WebServiceTemplate с Java keystore?

править
Я ищу способ настроить местоположение keystore в пружинной конфигурации

11
задан Mark Pope 10 March 2010 в 19:48
поделиться

4 ответа

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

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

1
ответ дан 3 December 2019 в 07:37
поделиться

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

0
ответ дан 3 December 2019 в 07:37
поделиться

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

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

1
ответ дан 3 December 2019 в 07:37
поделиться

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

    }
}
1
ответ дан 3 December 2019 в 07:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: