2015-08-14 4 views
1

У меня есть сервер Linux и приложение Java. Я использую Java 1.7 для запуска этого приложения. Я хочу включить JMX для целей мониторинга. Соединение JMX должно быть защищено SSL. До сих пор так легко.скрывает пароль хранилища ключей из списка процессов

Моя проблема: Как я могу безопасно указать jvm ключ-пароль? Пока соединение ssl работает только, если я передаю пароль по параметру командной строки «-Djavax.net.ssl.keyStorePassword = mypwd». Кажется, что пароль должен быть установлен при инициализации jvm.

Если я просматриваю список процессов (ps -ef) на консоли, я вижу свой Java-процесс - но со всеми параметрами командной строки. Таким образом, мой пароль для ключей хранится в текстовом виде для всех, кто может перечислить активные процессы (например, над агентом snmp). Как скрыть пароль из списка процессов?

Я попытался использовать конфигурационный файл (com.sun.management.config.file). Он хорошо работает для всех конкретных параметров jmx. Но мой пароль игнорируется.

Предоставляет пароль в параметре командной строки в обычном тексте, правда, единственный способ?

Да - Я знаю, что Java 1.7 не работает. Если Java 1.8 актуальна, эта проблема будет немедленно изменена.

Спасибо за помощь!

+0

Просто предложение, но вы можете котировать пароль из файла, который может быть прочитан только пользователем или группой JVM (или JMX). – hoss

+0

Мне нужно было бы ввести пароль из скрипта. Поэтому сам пароль отображается в списке процессов, а не в команде cat. – erwrock

ответ

1

Если вы используете System.setProperty("javax.net.ssl.keyStorePassword", "mypwd")до, вы используете любую из функций SSL в своей программе, она должна работать. Это означает, что вы должны стремиться установить его уже после того, как main был вызван, как вы можете. Вы можете загрузить свой собственный файл свойств, если хотите (читается только пользователем, работающим под JVM), где пароль можно сохранить.


Update свойство

системы, необходимое для управления также может быть установлено в конфигурационном файле. От Monitoring and Management Using JMX Technology:

Вы можете установить свойства мониторинга и управления из-оф-поле в файле в конфигурации или в командной строке. Свойства, указанные в командной строке , переопределяют свойства в файле конфигурации. По умолчанию местоположение конфигурационного файла: JRE_HOME/lib/management/management.properties. Виртуальная виртуальная машина Java читает этот файл , если установлено одно из свойств командной строки com.sun.management.jmxremote или com.sun.management.jmxremote.port: .

Данная документация предназначена для Java 1.8, но, я думаю, это относится и к Java 1.7. Если нет, я думаю, вы должны переключиться, как вы предложили.

+0

Как я уже говорил выше, я пытаюсь использовать JMX с SSL. JMX активируется при запуске JVM. Установка системного свойства из любой точки основной функции происходит после активации SSL для JMX. – erwrock

+0

Бинго! Вы можете передать следующий параметр в свой vm: -Dcom.sun.management.config.file = .В этом файле вы можете установить свойство com.sun.management.jmxremote.ssl.config.file = . И, наконец, в этом файле вы можете установить свойства javax.net.ssl.keyStore = file и javax.net.ssl.keyStorePassword = . Если вы знаете, где искать документацию, это довольно хорошо. К несчастью, это хорошо скрыто ... – erwrock

+0

ОК - это немного проще. Просто передайте параметр -Dcom.sun.management.jmxremote.ssl.config.file = непосредственно в vm. Нет необходимости в файле management.properties. – erwrock

Смежные вопросы