我有许多 Java 应用程序,它们通过使用 SSL 保护的连接连接到其他应用程序和服务。在开发过程中,我可以使用 JVM 参数指定要使用的密钥库/信任库和密码:
-Djavax.net.ssl.trustStore=certificate.jks
-Djavax.net.ssl.trustStorePassword=mypassword
-Djavax.net.ssl.keyStore=certificate.jks
-Djavax.net.ssl.keyStorePassword=mypassword
-Djavax.net.ssl.keyStoreType=jks
这完美地工作。但是,在生产时需要隐藏密码,使用 JVM args 意味着任何查看进程列表的人都可以看到明文密码。
有没有一种简单的方法来解决这个问题?我考虑将证书导入 JRE 的 lib/security/cacerts 文件,但我的理解是这仍然需要密码。一种选择是将加密的密码存储在文件中,然后让应用程序即时读取和解密,但这将涉及更改和重新发布所有应用程序(其中有很多),所以我如果可能的话,宁愿避免这种情况。javax.net.ssl 库是否有任何对加密密码的本机内置支持(即使它像 base64 编码一样简单,或者任何使密码不是明文的东西)?
任何建议都非常感谢。