我目前正在使用Spring Integration Web服务客户端,它可以正常使用http调用进行Web服务端点。 现在我正在尝试使用cacerts(defaut)将服务器证书的客户端密钥签名为客户端密钥来调用https端点。我们在cacerts中添加了服务器证书,并且我们将身份验证密钥保存在单独的keysore文件中以签署/添加传出消息的密钥。它与cacerts的证书绑定如预期的那样。对于传出消息alonwith服务器证书的签名/添加密钥,我在Spring Integration xml中添加了以下代码。
<bean id="keyStore" class="org.springframework.ws.soap.security.support.KeyStoreFactoryBean">
<property name="location">
<value>classpath:client.jks</value>
</property>
<property name="password" value="test123"/>
</bean>
<bean id="keyStoreHandler" class="org.springframework.ws.soap.security.xwss.callback.KeyStoreCallbackHandler">
<property name="keyStore" ref="keyStore"/>
<property name="privateKeyPassword" value="test123"/>
</bean>
添加上述代码后,身份验证密钥不与出站网关消息绑定,也没有异常。请帮助我在这里缺少的东西。需要在myown keystore文件中添加/签署身份验证密钥以及服务器证书。我非常感谢您对此的意见。
请参考我最终的Spring集成xml。
<bean id="xshMessageFactory" class="org.springframework.ws.soap.axiom.AxiomSoapMessageFactory" />
<si:channel id="xshReqChannel" />
<si:channel id="xshResChannel" />
<si:gateway id="xshProvider" service-interface="comm.sd.xshProvider" default-request-channel="xshReqChannel" default-reply-channel="xshResChannel"
/>
<ws:outbound-gateway id="xshProvider"
marshaller="xshMarshaller"
unmarshaller="xshMarshaller"
message-sender="xshMessageSender"
message-factory="xshMessageFactory"
request-channel="xshReqChannel"
reply-channel="xshResChannel"
uri="${xshEndPoint}" />
<bean id="keyStore" class="org.springframework.ws.soap.security.support.KeyStoreFactoryBean">
<property name="location">
<value>classpath:client.jks</value>
</property>
<property name="password" value="test123"/>
</bean>
<bean id="keyStoreHandler" class="org.springframework.ws.soap.security.xwss.callback.KeyStoreCallbackHandler">
<property name="keyStore" ref="keyStore"/>
<property name="privateKeyPassword" value="test123" />
</bean>
</beans>