我有一些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编码这样简单的东西,或使密码不是明文的任何内容)?任何建议都将不胜感激。