0

我有一个关于 SSLHandshakeException 使用 Spring WebServiceTemplate 与 https Web 服务交谈的问题

博罗达克回答

“无需将密钥导入密钥库。”

如果我们不提供密钥库,那么 Httpclient 将使用什么来发送 SSL 握手的客户端证书?

我需要在业务伙伴上调用 Web 服务 -

a) 使用公钥证书 X 使用 SSL 进行身份验证

b) 使用公钥证书对 SOAP 消息进行加密和签名 Y

我想我需要将证书 Y 指定为以下内容:

<bean class="org.springframework.ws.soap.security.wss4j.Wss4jSecurityInterceptor">
    <property name="securementActions" value="Signature"/>
    <property name="securementSignatureKeyIdentifier" value="DirectReference"/>
    <property name="securementUsername" value="mycert"/>
    <property name="securementPassword" value="certpass"/>
    <property name="securementSignatureCrypto">
      <bean class="org.springframework.ws.soap.security.wss4j.support.CryptoFactoryBean">
        <property name="keyStorePassword" value="123456"/>
        <property name="keyStoreLocation" value="classpath:/keystore.jks"/>
      </bean>
    </property>
</bean>

我不确定如何/在哪里为 SSL 握手指定证书 X。我认为它是 HttpClient,但我没有在 borodark 发布的 XML 中看到它。

请帮忙 !

4

1 回答 1

0

在您配置了密钥库的 xml 文件中,您应该有如下内容:

            <beans>
               <bean id="keyStoreHandler" class="org.springframework.ws.soap.security.xwss.callback.KeyStoreCallbackHandler">
               <property name="keyStore" ref="keyStore"/>
               <property name="privateKeyPassword" value="changeit"/>
           </bean>

           <bean id="keyStore" class="org.springframework.ws.soap.security.support.KeyStoreFactoryBean">
               <property name="location" value="classpath:keystore.jks"/>
               <property name="password" value="changeit"/>
           </bean>
       </beans>

这里的提示是

     <property name="location" value="classpath:keystore.jks"/>

那是密钥库的路径.. 现在,您可能可以在密钥库中使用某个别名进行 ssl 握手(这就是您在此处配置的内容),此外,安全策略利用同一个文件,但又在安全策略文件中使用你可以指定一个不同的别名..这应该可以解决问题..考虑一下

    <property name="location" value="classpath:keystore.jks"/>

表示类路径,您可以使用其他形式来引用战争本身之外的资源,这使您可以更改证书而根本不接触战争..

于 2015-05-31T21:26:08.523 回答