【问题标题】:How to set up SSL for Java RMI dynamically from code?如何从代码动态地为 Java RMI 设置 SSL?
【发布时间】:2011-07-27 13:47:37
【问题描述】:

我正在使用 Java RMI,直到现在只使用以下 VM 参数

-Djavax.net.ssl.trustStore=${workspace_loc:/ssltest/server/servertruststore.jks} 
-Djavax.net.ssl.trustStorePassword=server
-Djavax.net.ssl.keyStore=${workspace_loc:/ssltest/server/serverkeystore} 
-Djavax.net.ssl.keyStorePassword=server

并且只是使用 SslRMI 套接字工厂进行注册表和对象的导出。
现在我想摆脱额外的命令行参数并从属性文件中读取它。我希望为此我只需要通过

设置属性
System.setProperty("javax.net.ssl.trustStore", "C:/servertruststore.jks");

等等,然后自动设置这些东西(就像从 VM 参数开始时发生的那样)。我该怎么做才能做到这一点?

如果这是不可能的,我还能做什么?我是否必须使用 Keystore 和 TrustManagers 创建自己的 SSLContext?以及如何将这个上下文传递给我的 SslRMIFactories?

【问题讨论】:

    标签: java configuration ssl jvm rmi


    【解决方案1】:

    是的 - 这些参数也可以使用 System.setProperty 设置。如何回答取决于您的环境。如果您使用的是应用程序服务器,则可能有一些配置文件可以自动设置/公开自定义系统属性。例如,在 JBoss 上,该文件是部署文件夹下的 properties-service.xml。

    【讨论】:

    • 但我是独立的。当给定这些参数时,我必须如何触发像 Java 这样的自动设置?
    • 您为什么要寻找替代方案?
    • 决定,密码不应该出现在命令行中。
    • @WorstCase 所以像他说的那样使用 System.setProperty() 。您必须在导出任何 SSL 套接字或远程对象之前执行此操作,如果您使用 LocateRegistry.createRegistry(),后者包括注册表。
    • @EJP 谢谢,错误是在设置属性之前初始化套接字工厂..
    猜你喜欢
    • 2012-05-13
    • 1970-01-01
    • 2013-06-30
    • 1970-01-01
    • 2011-06-06
    • 1970-01-01
    • 1970-01-01
    • 2018-05-07
    • 1970-01-01
    相关资源
    最近更新 更多