我做了以下事情:
+ generate keystore.jks with keytool
+ exported keystore.cer file with keytool
+ imported keystore.cer file into truststore.jks
+ copied keystore.jks and keystore.cer to the client
然后我用
打电话给我的服务器-Djavax.net.ssl.trustStore=truststore.jks -Djavax.net.ssl.trustStorePassword=*
和我的客户
-Djavax.net.ssl.keyStore=forclient.jks -Djavax.net.ssl.keyStorePassword=*
服务器使用UnicastRemoteObject的super()调用公开其接口
super(PORT,
new SslRMIClientSocketFactory(),
new SslRMIServerSocketFactory(null, null, true));
注册表内容不使用任何SSL。为什么不运作? 如果我在服务器运行配置中添加密钥库VM参数,并在clien中添加trustore VM参数,那么它可以解决问题。但我真的想知道为什么?
答案 0 :(得分:5)
请先了解密钥库和信任库的目的。看看POST。它说
密钥库包含私钥,证书及其对应的公钥。
信任库包含您希望与之通信的其他方的证书,或来自您信任以识别其他方的证书颁发机构的证书。
因此客户端应该有信任库,以便它信任与其交互的服务器使用服务器的公钥来加密数据。服务器应该有密钥库,它存储私钥,用于解密客户端通过相应私钥加密的数据。
我希望您现在知道在客户端 - 服务器中切换密钥库和信任库时应用程序的工作原理。