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

问题描述 投票:1回答:1

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

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

如果我在控制台上查看进程列表(ps -ef),则可以看到我的Java进程-但带有所有命令行参数。因此,对于可以列出活动进程(例如通过snmp代理)的每个人,我的密钥库密码均以纯文本列出。如何从进程列表中隐藏密码?

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

是否真的以纯文本格式在命令行参数中提供密码?

是-我知道Java 1.7不能使用。如果Java 1.8确实解决了此问题,我将立即进行更改。

感谢您的帮助!

java ssl jmx keystore
1个回答
1
投票

如果执行System.setProperty("javax.net.ssl.keyStorePassword", "mypwd") 之前,则在程序中使用任何SSL功能,它应能正常工作。这意味着您应该将其设置为尽早调用main。如果愿意,可以先加载自己的属性文件(只有运行JVM的用户才能读取),可以在其中存储密码。


更新

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

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

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


0
投票

如何在Java程序中设置密码?

© www.soinside.com 2019 - 2024. All rights reserved.