将WebServiceTemplate与密钥库一起使用

Mar*_*ope 11 java ssl spring spring-ws

是否可以使用java密钥库配置WebServiceTemplate?

编辑
我正在寻找一种在spring配置中配置密钥库位置的方法

Suk*_*hah 11

我在六年后发布了这个答案,但说实话,没有一个帖子提供完整而简洁的解决方案.您所需要的只是spring-ws-core(2.1.4.RELEASE +)和spring-we-security(2.2.4.RELEASE +)依赖项.下一步是将自定义密钥库和信任库配置为bean,然后在spring配置中将它们注入Web服务模板.

<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>
Run Code Online (Sandbox Code Playgroud)

总之,不需要编写任何代码,使用spring配置可以轻松实现用例.


sim*_*ord 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。文件,%20java.security.KeyStore.ProtectionParameter%29

因此,也许有一个具有Web服务模板或扩展它的类,然后在Spring配置中设置密钥库的文件路径,并使其成为一个初始化bean(Spring 3中的@PostConstruct?),然后加载密钥库。

File f = new File(keyStorePath);
KeyStore.Builder builder = KeyStore.Builder.newInstance("type",provider,file,protection);
KeyStore keystore = builder.getKeyStore();
Run Code Online (Sandbox Code Playgroud)

好的 - 要实际将它与您的 webservicetemplate 一起使用,我认为它必须基于密钥库回调,如此处记录:http://static.springsource.org/spring-ws/sites/1.5/reference/html/security.html#d0e4462

或者也许可以通过使用 spring org.springframework.ws.transport.http.HttpsUrlConnectionMessageSender 来设置 keystoremanager 。然后您的 Web 服务模板就可以使用它。

有点像这样:

<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>
Run Code Online (Sandbox Code Playgroud)

华泰