2009-07-31 3 views
3

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

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

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

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

Спасибо.

ответ

0

Два вопроса:

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

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

1

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

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

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

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

Настройка программы как сервис можно сделать довольно легко с Java Service Wrapper

+0

Не отображается ли это через таблицу процессов (если вы указываете ее как параметр командной строки) или через файл .conf обертки сервиса? –

+0

Ну, насколько я знаю, файл .conf больше не нужен после запуска приложения, поэтому вы можете просто удалить файл полностью или просто параметр. – gizmo

1

Там нет никакого способа, которым вы можете сохранить пароль безопасно, если кто-то имеет право доступа, что для запуска машины. Сохранение пароля, зашифрованного где-то в памяти, является самым безопасным способом, который, как я думаю, так же, как предлагаемое выше решение для работы с сервисом.

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

2

Ответ прост:

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

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

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

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

Что-нибудь еще более или менее театр.

+0

Почему голос? Что-то неточное? –

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