从进程列表中隐藏密钥库密码

时间:2015-08-14 13:35:12

标签: java ssl jmx keystore

我有一个Linux服务器和一个java应用程序。我正在使用Java 1.7来运行此应用程序。我想启用JMX进行监控。应通过SSL保护JMX连接。到目前为止很容易。

我的问题:如何以安全的方式告诉jvm密钥库密码?到目前为止,仅当我通过命令行参数" -Djavax.net.ssl.keyStorePassword = mypwd"传递密码时,ssl连接才有效。似乎必须在初始化jvm时设置密码。

如果我在控制台上查看进程列表(ps -ef),我可以看到我的java进程 - 但是包含所有命令行参数。因此,我的密钥库密码以纯文本形式列出,可供列出活动进程的所有人(例如通过snmp代理)。如何隐藏进程列表中的密码?

我曾尝试使用配置文件(com.sun.management.config.file)。它适用于所有jmx特定参数。但我的密码被忽略了。

以纯文本形式在命令行参数中提供密码是唯一的方法吗?

是的 - 我知道Java 1.7已停止服务。如果Java 1.8实际修复了这个问题,我会立即改变。

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

如果您在之前执行System.setProperty("javax.net.ssl.keyStorePassword", "mypwd") ,则可以使用程序中的任何SSL功能。这意味着您应该尽可能在main被调用之后尽早设置它。您可以根据需要加载自己的属性文件(只能由运行JVM的用户读取),密码可以存储在其中。

<强>更新

管理所需的系统属性也可以在配置文件中设置。来自Monitoring and Management Using JMX Technology

  

您可以在a中设置开箱即用的监控和管理属性   配置文件或在命令行上。在上面指定的属性   命令行覆盖配置文件中的属性。默认   配置文件的位置是    JRE_HOME /lib/management/management.properties。 Java VM读取此内容   file是否为命令行属性之一   com.sun.management.jmxremotecom.sun.management.jmxremote.port是。textureFromNode:   集。

本文档适用于Java 1.8,但我想同样适用于Java 1.7。如果没有,我猜你必须按照你的建议进行切换。