Управление паролями хранилища ключей

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

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

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

Спасибо


person Mickael Marrache    schedule 18.07.2012    source источник


Ответы (1)


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

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

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

person Bruno    schedule 18.07.2012
comment
Спасибо, про доработку для трастового не подумал, очевидно. - person Mickael Marrache; 18.07.2012
comment
У меня есть еще один связанный с этим вопрос. Почему TrustManagerFactory не требует пароля для инициализации, в то время как KeyManagerFactory требует? Кроме того, пароли для хранилища ключей и хранилища доверенных сертификатов были предоставлены во время load (). - person Mickael Marrache; 18.07.2012
comment
Пароль KMF предназначен для использования закрытого ключа. В обоих случаях вы уже загрузили само хранилище ключей, прежде чем передавать его любой из фабрик. - person Bruno; 18.07.2012