Хранение паролей для пакетных заданий - PullRequest
3 голосов
/ 31 июля 2009

У меня есть небольшая Java-прога, которая использует веб-сервис, который требует авторизации. Таким образом, программа Java (которая должна запускаться с помощью планировщика задач Windows) должна иметь аргумент user / password. Как я могу хранить их где-нибудь, не размещая их в файле в виде открытого текста?

До сих пор я пытался использовать runtime.getRuntime и CACLS, чтобы получить текстовый файл, но изменить разрешения, чтобы открыть его мог только владелец (не работал, не уверен почему).

Шифрование пароля не работает, потому что, если я передаю хэш веб-службе, веб-служба просто «ошибаешься, отказано, потеряйся», но если я использую шифрование с секретным ключом, тебе нужен пароль для расшифровки пароля. и где я могу хранить это. : P

Помощь? Пожалуйста? :)

Спасибо.

Ответы [ 5 ]

2 голосов
/ 31 июля 2009

Простой ответ:

Вы не можете сделать его полностью безопасным, но вы можете сделать его незначительно более безопасным.

Вы НЕ МОЖЕТЕ хешировать пароль, поскольку это предотвратит его использование вашей программой.

Вы МОЖЕТЕ поместить пароль в файл и защитить файл, используя разрешения ОС. Вам нужно будет разрешить процессу, выполняющему вашу программу, доступ на чтение. Это предотвращает просмотр пароля любым пользователем без прав администратора.

Вы МОЖЕТЕ зашифровать пароль и предоставить ключ в своей программе. Это предотвращает случайное наблюдение за паролем теми, кто может прочитать файл, но не остановит (или даже сильно замедлит) кого-либо, имеющего доступ к паролю и вашей программе.

Все остальное - более или менее театр.

1 голос
/ 31 июля 2009

Невозможно безопасно сохранить свой пароль, если у кого-то есть права доступа к этой работающей машине. Я думаю, что хранить пароль в зашифрованном виде в памяти - это самый безопасный способ, такой же, как предложенное выше решение «запуск при обслуживании».

Для более изощренного подхода вы можете создать демон, который позволит вам вводить пароль, хранить его в зашифрованном виде в памяти и передавать этот зашифрованный текст в вашу Java-программу через IPC (сокет), затем ваша программа расшифрует его использовать. Но я бы никогда этого не сделал ... Хихихи ...

1 голос
/ 31 июля 2009

как я могу хранить их где-нибудь, не оставляя их в виде открытого текста?

Хранение без «файла» будет затруднено. В любом случае, в какой-то момент вы должны восстановить пароль из какого-то места.

  • Используйте некоторое симметричное шифрование для запутывая, поэтому быстрый хеш не раскрыть свой пароль
  • Использовать файловую систему ОС (только для чтения для пользователя который использует программу, нет доступа ко всем другое) защитить файл на локальном диске или поместить его на внешний диск (флэш).
0 голосов
/ 31 июля 2009

Можно не использовать планировщик задач Windows, а поместить свою программу в качестве службы. При этом вы можете один раз запустить службу с паролем в качестве параметра. Тогда пароль остается в памяти для вашего сервиса, и вам больше не нужно его хранить.

Настройка программы в качестве службы может быть легко выполнена с помощью Java Service Wrapper

0 голосов
/ 31 июля 2009

Два вопроса:

  1. зачем вам хранить их внешне в программе? Почему бы не кодировать в вашей Java-программе (нужно ли вам или пользователю изменять их?)
  2. Можете ли вы хранить их внешне, но в зашифрованном виде ? Например, вы можете зашифровать с помощью открытого ключа и сохранить закрытый ключ в самой программе. Так что видимость закодированной пары не должна иметь значения.

У вас есть проблема независимо от того, какой из подходов, вы можете легко разобрать Java-программу Какой бы метод вы ни выбрали, разборка сделает его уязвимым.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...