2012-07-18 2 views
0

Хранилище ключей (независимо от того, используется ли оно для «хранилищ ключей» или «truststores») инициализируется после создания с использованием метода load(). Одна версия ожидает InputStream, соответствующей файлу хранилища ключей, и пароль для дешифрования файла. Предоставление пароля методу программно кажется мне странным.Управление паролями Keystore

Например, сервер использует хранилище ключей для хранения его закрытых ключей и связанных сертификатов. Информация, присутствующая в хранилище ключей, является разумной, поэтому она защищена паролем. Каковы проблемы с передачей пароля программно load()? Какова наилучшая практика?

Другой пример, но пока что касается доверительных магазинов. У клиента есть доверительное хранилище, где хранится сертификаты доверенных ЦС. Насколько я понимаю, доверительный сервер не содержит сертификата сервера, а только сертификаты центров сертификации, которые позволяют проверять сертификат сервера. Один пример доверия, который я вижу, - это тот, который присутствует в JRE (в папке security - cacerts). Посмотрев конфигурацию, я вижу, что она защищена паролем по умолчанию changeit. Я понимаю, что доверительный магазин реализован с использованием хранилища ключей, поэтому он (или, может быть, не обязательно?) Должен быть зашифрован с использованием пароля. Но, поскольку в хранилищах обычно хранятся общедоступная информация (сертификаты доверенного ЦС), почему рекомендуется менять пароль?

Благодаря

ответ

2

Предоставление пароля для метода программно кажется странным меня.

Я не уверен, почему это было бы странно. Приложение должно будет иметь возможность получить содержимое хранилища ключей в той или иной точке. Пароль должен быть передан ему каким-то образом. Передача его методу load() не имеет меньшего смысла, чем другие решения (конечно, избегайте жесткого кодирования). Кроме того, вы можете использовать метод, который использует обратный вызов. Если вы не думаете, что это подходит, вы можете использовать провайдера PKCS # 11 и токен оборудования (хотя вам все равно нужно указать пароль/PIN-код) или использовать что-то вроде Apple KeychainStore (где пароль не является но служба OS keychain позаботится об этом).

Что касается доверительного хранилища, то в действительности используются два паролей. Они могут отличаться при использовании формата JKS. Один защищает хранилище ключей и защищает доступ к закрытым записям (getKey). В этом случае пароль хранилища ключей используется для предотвращения несанкционированных сторон от изменения доверительного хранилища (и добавления собственных сертификатов CA или сервера).

+0

Спасибо, я не думал о модификации для truststore, это очевидно. –

+0

У меня есть другой связанный с этим вопрос. Почему TrustManagerFactory не нуждается в пароле для инициализации, а KeyManagerFactory? Кроме того, пароли для Keystore и Truststore были предоставлены во время загрузки(). –

+0

Пароль KMF предназначен для использования закрытого ключа. В обоих случаях вы уже загрузили хранилище ключей, прежде чем передавать его на фабрики. – Bruno

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