2014-12-19 4 views
0

Я использую Java хранилище ключи, посмотрел через API, но я не могу понять, почемуKeystore: Почему getCertificateChain (..) не требует пароля, а getKey требует пароль?

Certificate[] chain = ks.getCertificateChain(alias) 

не требует пароля, чтобы получить цепочку сертификатов, а

PrivateKey pk = (PrivateKey) ks.getKey(alias, PASSWORD); 

требует пароля?

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

http://docs.oracle.com/javase/7/docs/api/java/security/cert/Certificate.html

ответ

2

Поверхностное: Вам нужен пароль, чтобы получить PrivateKey значение, поскольку PrivateKey значение шифруется с паролем, чтобы держать его закрытым, так как PrivateKey должно быть частным. Вам не нужен пароль для дешифрования certficate, даже один в закрытом ключе запись, потому что сертификат не зашифрован, потому что нет необходимости, чтобы он был закрытым. Ах, вы говорите, но почему не нужно быть сертифицированным?

Фундаментальный: Определяющая характерная и основная функция криптографии с открытым ключом заключается в том, что публика всегда может быть и обычно является общедоступной, и система (если она правильно реализована и используется) по-прежнему безопасна. Поскольку сертификат для публики имеет основную цель достоверно, но не конфиденциально, передающий публикацию, он почти всегда также рассматривается как открытый, хотя на практике сертификат иногда содержит другой информации, которая может быть несколько чувствительной.

Например, когда клиент HTTPS, например веб-браузер, подключается к веб-сайту, сервер должен предоставить свой сертификат и обычно (большую часть) его цепочку сертификатов, чтобы клиент мог аутентифицировать сервер как действительный и защитить ключ обмен. Эти сертификаты всегда могут видеть все, кто может видеть трафик в сети (включая законные вещи, такие как маршрутизаторы на пути), и для большинства серверов может быть получен более или менее любой потенциальный клиент, даже если фактические веб-запросы или транзакции не разрешены , Если вы хотите, чтобы люди отправляли вам зашифрованную электронную почту S/MIME, вам необходимо отправить им свой сертификат (ы) или опубликовать сертификат (ы) где-нибудь, к которому могут иметь доступ любые отправители, чтобы можно было убедиться в правильном ключе шифрования для использования для вы. Когда вы отправляете подписанную электронную почту S/MIME, вам необходимо включить или опубликовать свой сертификат (ы), чтобы получатель мог подтвердить вашу электронную почту - если только у получателей (ов) их нет, и в этом случае они были отправлены или опубликованы ранее. Эти процессы обычно позволяют многим людям, кроме желаемых или необходимых отправителей и получателей, хотя и не всегда точно всех, видеть ваши сертификаты. Если вы хотите подписать код, вы должны также предоставить или предоставить свой сертификат (ы) для получателей, чтобы использовать для проверки подписи; особенно для подписания апплетов (дизайн-код для Java), это обычно делает ваш сертификат (ы) видимым для очень большой части мира.

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

То, что вы обычно имеете и должны иметь это PrivateKey запись, содержащее PrivateKey значения которые индивидуальны/зашифрована и один или несколько сертификаты формирование цепи с (только или) первым сертом содержащей ОткрытыйКлюче, что соответствует (и во время генерации фактически получена из) закрытая клавиша. Вот как java.security.KeyStore определяет PrivatKeyEntry. Вы можете получить цепочку сертификатов или первый сертификат без пароля. Вам нужен пароль для доступа к закрытому ключу значение от закрытого ключа запись.

Пароль к файлу: Все перечисленное относится к хранилищу ключей в памяти. Если вы пишете KeyStore в файл (с поставщиками по умолчанию, по крайней мере), то целостности защищено с хэш шпонки по файлу пароля (так называемый магазина пароля в keytool), которые необходимо предоставить; при чтении файла в нем не обязательно указывать этот пароль для проверки целостности.

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