为什么我的RMI / SSL客户端身份验证不起作用?

时间:2011-07-15 13:50:45

标签: java security ssl rmi

我做了以下事情:

+ 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参数,那么它可以解决问题。但我真的想知道为什么?

1 个答案:

答案 0 :(得分:5)

请先了解密钥库和信任库的目的。看看POST。它说

  • 密钥库包含私钥,证书及其对应的公钥。

  • 信任库包含您希望与之通信的其他方的证书,或来自您信任以识别其他方的证书颁发机构的证书。

因此客户端应该有信任库,以便它信任与其交互的服务器使用服务器的公钥来加密数据。服务器应该有密钥库,它存储私钥,用于解密客户端通过相应私钥加密的数据。

我希望您现在知道在客户端 - 服务器中切换密钥库和信任库时应用程序的工作原理。