Spring HTTP调用程序的TLS / SSL配置

时间:2012-02-28 07:47:20

标签: spring ssl certificate ssl-certificate

我对TSL / SSL有疑问。我正在使用Spring HTTP-Invoker编写客户端 - 服务器应用程序。客户端是一个“经典”桌面应用程序,通过webstart分发。服务器将在Tomcat / JBoss上运行。我已经使用测试服务测试了调用,它就像一个魅力,但现在我正在尝试使用SSL来加密频道。我将发布我的客户端代码以澄清:

<bean id="checkFuntionalityService" class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">
    <property name="serviceUrl" value="https://localhost:8443/test-server/remoting/checkFuntionalityService" />
    <property name="serviceInterface" value="at.test.common.remote.CheckFuntionalityService" />
    <property name="httpInvokerRequestExecutor">
        <bean class="org.springframework.remoting.httpinvoker.HttpComponentsHttpInvokerRequestExecutor">
            <property name="readTimeout" value="5000" />
            <property name="connectTimeout" value="5000" />
        </bean>
    </property>
</bean>

我尝试使用自签名证书,我把它放入我的cacerts商店并且它有效,但我还有一些问题:

有没有办法在客户端使用不同的密钥库/信任库(例如classpath:config / test.jks)?我的计划是将我的证书放入一个新的密钥库,我将其放入客户端项目中。这是可能的,如果是这样的话:我如何在客户端使用这个商店?我知道更好的方法是来自可信CA的证书,但这不是一个选项atm。此外,我不能把钥匙放在每个用户cacerts商店。有什么提示吗?

我也愿意接受任何建议。我应该坚持使用HTTP-Invoker吗?我也可以使用Spring RMI-Invoker,我明白唯一的区别是HTTP-Invoker使用HTTP-Post来传输二进制内容,这更不可能被防火墙阻止,对吧?但是如果防火墙配置对我来说不是问题怎么办?我应该使用RMI还是坚持使用HTTP-Invoker呢?

1 个答案:

答案 0 :(得分:0)

(在问题编辑中回答。转换为社区维基回答。请参阅What is the appropriate action when the answer to a question is added to the question itself?

OP写道:

  

问题已经解决了!我把密钥库和信任库搞混了。因此,如果您发现了这个问题并寻找答案,请查看:Trust Store vs Key Store - creating with keytool。简而言之:您必须创建一个证书,您将该证书放在服务器的密钥库中以及客户端的信任库中。好吧,基本上密钥库和信任库之间没有真正的区别,唯一的区别是你使用不同的系统属性在你的程序中定义它们。 (例如,信任库的javax.net.ssl.trustStore)。多数民众赞成在我搞砸了!

     

我仍然对是否使用Spring HTTP Invoker的原因感兴趣。