我有一个关于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存储中,它起作用了,但我仍然有一些问题:
有没有办法在客户端使用不同的keystore/truststore (例如classpath:config/test.jks)?我的计划是将我的证书放入一个新的keystore中,然后将其放入客户端项目中。这是可能的吗?如果可能:我如何在客户端使用这个商店?我知道一种更好的方法是从可信的CA那里获得证书,但这不是可选的自动取款机。此外,我不能将密钥放在每个用户的cacerts存储中。对我有什么提示吗?
我也对任何类型的建议持开放态度。我应该坚持使用HTTP-Invoker吗?我也可以使用Spring RMI-Invoker,我知道唯一的区别是HTTP-Invoker使用HTTP-Post来传输二进制内容,这更不可能被防火墙阻止,对吧?但是如果防火墙配置对我来说不是问题呢?我应该使用RMI还是坚持使用HTTP-Invoker?
发布于 2015-02-09 02:50:45
(在问题编辑中回答。已转换为社区维基答案。参见What is the appropriate action when the answer to a question is added to the question itself? )
操作员写道:
问题已经解决了!我把密钥库和信任库搞混了。因此,如果你找到了这个问题并寻找答案,看看:Trust Store vs Key Store - creating with keytool。简而言之:您必须创建一个证书,将其放在服务器的密钥库和客户端的信任库中。从本质上讲,密钥库和信任库之间并没有什么真正的区别,唯一的区别是您在程序中使用不同的系统属性来定义它们。(例如,信任库的javax.net.ssl.trustStore )。这就是我搞砸的地方!
我仍然对是否使用Spring HTTP Invoker的原因感兴趣。
https://stackoverflow.com/questions/9478168
复制相似问题