Spec-Zone .ru
спецификации, руководства, описания, API
След: Средства защиты в Java SE

Урок: API и Использование Инструментов для Обменов Безопасного кода и Файла

Этот урок объясняет, почему цифровые подписи, сертификаты, и keystores необходимы. Урок также сравнивает использование инструментов против API Безопасности JDK относительно генерирования подписей. Такое использование инструмента демонстрируется в следующих двух уроках, Подписывая Код и Предоставление Этого Полномочия и Обмен Файлами. Использование API демонстрируется в Генерировании и Проверке урока Подписей.

Этот урок содержит следующие разделы

Кодируйте и Безопасность Документа

Если Вы электронно отправляете кому-то важный документ (или документы), или апплет или приложение, чтобы работать, получатель нуждается в способе проверить, что документ или код прибыли от Вас и не были изменены в пути (например злонамеренным пользователем, прерывающим это). Цифровые подписи, сертификаты, и keystores, который вся справка гарантирует безопасности файлов, которые Вы отправляете.

Цифровые подписи

Основная идея в использовании цифровых подписей следующие.

  1. Вы "подписываете" документ или код, используя один из Ваших закрытых ключей, при использовании которых можно генерировать keytool или методы API безопасности. Таким образом, Вы генерируете цифровую подпись для документа или кода, используя jarsigner инструмент или методы API Безопасности.
  2. Вы отправляете свой подписанный документ Вашему получателю.
  3. Вы также предоставляете своего получателя Ваш открытый ключ. Этот открытый ключ соответствует закрытому ключу, Вы первоначально имели обыкновение генерировать подпись.
  4. Ваш получатель использует Ваш открытый ключ, чтобы проверить, что Ваш документ прибыл от Вас и не был изменен прежде, чем это достигло его/ее.

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

Для получения дополнительной информации о терминологии и понятии подписания и проверки, и дальнейшего объяснения преимуществ, см. раздел Файлов JAR Подписания "Программы Упаковки в уроке" Файлов JAR.

Сертификаты

Сертификат содержит:

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

Если получатель не может установить доверительную цепочку, то он или она может вычислить цифровой отпечаток (ки) сертификата, используя keytool -import или -printcert команда. Цифровой отпечаток является относительно коротким числом, которое уникально и достоверно идентифицирует сертификат. (Технически, цифровой отпечаток является значением хэш-функции информации о сертификате, используя функцию обзора сообщения.) Получатель может тогда позвонить владельцу сертификата и сравнить значения цифрового отпечатка полученного сертификата с сертификатом, который был отправлен. Если цифровые отпечатки являются тем же самым, сертификаты являются тем же самым.

Таким образом можно гарантировать, что сертификат не был изменен в пути. Одна другая потенциальная неопределенность, когда работа с сертификатами является идентификационными данными отправителя. Иногда сертификат самоподписывается, то есть, подписал использование закрытого ключа, соответствующего открытому ключу в сертификате; выпускающий является тем же самым как предметом. Разумно самоподписать сертификат, если получатель уже доверяет отправителю.

Иначе отправитель должен получить сертификат из доверенной третьей стороны, называемой центром сертификации (CA). Чтобы сделать так, Вы отправляете самоподписанный запрос подписания сертификата (CSR) CA. CA проверяет подпись на CSR и Ваших идентификационных данных, возможно проверяя Ваши водительские права или другую информацию. CA тогда ручается за то, что вы были владельцем открытого ключа, выпуская сертификат и подписывая это с его собственным (CA) закрытый ключ. Любой, кто доверяет открытому ключу CA издания, может теперь проверить подпись на сертификате. Во многих случаях у CA самого издания может быть сертификат от CA выше в иерархии CA, приводя к цепочкам сертификата.

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

Если Вы отправляете подписанный код или документы другим, Вы должны предоставить их сертификат, содержащий открытый ключ, соответствующий закрытому ключу, используемому, чтобы подписать код/документ. keytool -export команда или методы API могут экспортировать Ваш сертификат от Вашего keystore до файла, который может тогда быть отправлен любому нуждающемуся в этом. Человек, который получает сертификат, может импортировать его в keystore как доверяемый сертификат, использование, например, методы API или keytool -import команда.

Если Вы используете jarsigner инструмент, чтобы генерировать подпись для файла JAR, инструмент получает Ваш сертификат и его цепочку сертификата поддержки от Вашего keystore. Инструмент тогда хранит их, наряду с подписью, в файле JAR.

Keystores

Закрытые ключи и их связанные сертификаты с открытым ключом сохранены в защищённых паролем базах данных, названных keystores. keystore может содержать два типа записей: доверяемые записи сертификата, обсужденные выше, и записи ключа/сертификата, каждый содержащий закрытый ключ и соответствующий сертификат с открытым ключом. Каждая запись в keystore идентифицируется псевдонимом.

У keystore владельца могут быть многократные ключи в keystore, к которому получают доступ через различные псевдонимы. Псевдоним обычно называют в честь определенной роли, в которой keystore владелец использует связанный ключ. Псевдоним может также идентифицировать цель ключа. Например, псевдоним signPersonalEmail мог бы использоваться, чтобы идентифицировать keystore запись, закрытый ключ которой используется для того, чтобы подписать персональную электронную почту, и псевдоним signJarFiles мог бы использоваться, чтобы идентифицировать запись, закрытый ключ которой используется для того, чтобы подписать файлы JAR.

keytool инструмент может привыкнуть к

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

Инструмент и Примечания API

Отметьте следующий относительно использования инструментов и API, связанного с цифровыми подписями.

Использование API Безопасности JDK, чтобы Подписать Документы

Генерирование и Проверка Подписей показывают Вам, как использовать API Безопасности JDK, чтобы подписать документы. Урок показывает то, к чему сделала бы одна программа, выполняемая человеком, у которого есть оригинал документа,

Затем это показывает пример другой программы, выполняемой получателем данных, подписи, и открытого ключа. Это показывает как программа

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

Использование Инструментов, чтобы Подписать Код или Документы

Код Подписания и Предоставление Его шоу урока Полномочий, как использовать Средства обеспечения безопасности Java, чтобы поместить Ваш код в файл JAR, подпишите его, и экспортируйте Ваш открытый ключ. Затем это показывает, как Ваш получатель может использовать эти те же самые инструменты Java, чтобы импортировать Ваш сертификат с открытым ключом и затем добавить запись в файл политики, который предоставит Вашему коду разрешение, это должно получить доступ к системным ресурсам, которыми управляет Ваш получатель.

Урок Файлов Обмена Вы, как использовать средства обеспечения безопасности Java, чтобы подписать документ и затем экспортировать сертификат с открытым ключом для использования с открытым ключом keytool. соответствие закрытому ключу, используемому, чтобы подписать то использование документа keytool. Затем это показывает, как Ваш получатель может проверить Вашу подпись, устанавливая Ваш сертификат с открытым ключом и затем используя jarsigner инструмент, чтобы проверить Вашу подпись.

Эти два урока имеют много общего. В обоих случаях первые два шага для кода или отправителя документа к:

Следующие два шага являются дополнительными:

Следующие два шага требуются:

В обоих случаях получатель подписанного файла JAR и сертификата должен импортировать сертификат как доверяемый сертификат, используя keytool -import команда. keytool попытается создать доверительную цепочку из сертификата, который будет импортирован в уже доверяемый сертификат в keystore. Если это перестало работать, keytool выведет на экран цифровой отпечаток сертификата и запросит Вас проверять это.

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

Если бы то, что было отправлено, было одним или более документами, то получатель должен проверить подлинность подписи файла JAR, используя jarsigner инструмент.

Этот урок обсуждает два дополнительных шага. Другие шаги покрываются следующими двумя уроками, Подписывая Код и Предоставление Этого Полномочия и Обмен Файлами.

Генерирование Запроса Подписания Сертификата (CSR) для Сертификата С открытым ключом

Когда keytool используется, чтобы генерировать пары "открытый/закрытый ключ", это создает keystore запись, содержащую закрытый ключ и самоподписанный сертификат для открытого ключа. (Таким образом, сертификат подписывается, используя соответствующий закрытый ключ.) Это может соответствовать, если люди, получающие Ваши подписанные файлы уже, знают и доверяют Вашим идентификационным данным.

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

keytool -certreq -alias alias -file csrFile 

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

Вы тогда представляете этот файл CA, такому как VeriSign, Inc. CA аутентифицирует Вас, проситель ("предмет"), и затем подписывает и возвращает сертификат, аутентифицирующий Ваш открытый ключ. Подписывая сертификат, CA ручается, что Вы - владелец открытого ключа.

В некоторых случаях CA возвратит цепочку сертификатов, каждый аутентифицирующий открытый ключ подписывающего лица предыдущего сертификата в цепочке.

Импорт Ответа от CA

Если бы Вы представили запрос подписания сертификата (CSR) центру сертификации (CA), то Вы должны заменить исходный самоподписанный сертификат в своем keystore с цепочкой сертификата, импортируя сертификат (или цепочка сертификатов) возвратился к Вам CA.

Но сначала Вы нуждаетесь в "доверяемом сертификате" запись в Вашем keystore (или в cacerts файл keystore, описанный ниже), который аутентифицирует открытый ключ CA. С такой записью может быть проверена подпись CA. Таким образом, подпись CA на сертификате, или на заключительном сертификате в цепочке, которую CA отправляет Вам в ответ на Ваш CSR, может быть проверена.

Импорт Сертификата от CA как "Доверяемый Сертификат"

Прежде, чем Вы импортируете ответ сертификата из CA, Вы нуждаетесь в одном или более "доверяемых сертификатах" в Вашем keystore или в cacerts файл.

cacerts файл представляет keystore в масштабе всей системы с сертификатами CA. Этот файл находится в каталоге свойств безопасности JRE, java.home/lib/security, где java.home является каталогом установки JRE.


ВАЖНЫЙ: Проверьте Ваш cacerts Файл
Так как Вы доверяете АВАРИИ cacerts файл как объекты для подписания и издания сертификатов другим объектам, следует управлять cacerts зарегистрируйте тщательно. cacerts файл должен содержать только сертификаты об АВАРИИ, которой Вы доверяете. Это - Ваша обязанность проверить доверяемые корневые сертификаты CA, связанные в cacerts файл и принимает Ваши собственные доверительные решения. Удалить недоверяемый сертификат CA из cacerts файл, используйте удалить опцию keytool команда. Можно найти cacerts файл в каталоге установки JRE. Свяжитесь со своим системным администратором, если у Вас нет разрешения, чтобы отредактировать этот файл.


cacerts файл содержит много доверяемых сертификатов CA. Если Вы отправили свой CSR одному из этих доверяемых поставщиков (таких как VeriSign), Вы не должны будете импортировать корневой сертификат поставщика как доверяемый сертификат в Вашем keystore; можно продолжить к следующему разделу видеть, как импортировать ответ сертификата из CA.

Сертификат от CA обычно или самоподписывается или подписывается другим CA, когда Вы также нуждаетесь в сертификате, аутентифицирующем что открытый ключ CA. Предположите, что компания ABC, Inc., CA и что Вы получаете названный файл ABCCA.cer, согласно заявлению самоподписанный сертификат от ABC, аутентифицируя, что открытый ключ CA.

Очень делайте все возможное гарантировать, что сертификат допустим до импорта этого как "доверяемый" сертификат! Просмотрите это сначала (использующий keytool -printcert команда или keytool -import команда без -noprompt опция), и удостоверяются что выведенное на экран соответствие цифрового отпечатка (ков) сертификата ожидаемые. Можно вызвать человека, который отправил сертификат, и сравните цифровой отпечаток (ки), что Вы видите с теми, что они показывают или что безопасный репозитарий с открытым ключом показывает. Только если цифровые отпечатки равны, это, гарантировал, что сертификат не был заменен в пути с чьим-либо (например, атакующий) сертификат. Если бы такая атака имела место, и Вы не проверяли сертификат прежде, чем Вы импортировали это, то Вы закончили бы тем, что доверяли чему-либо, что атакующий подписал.

Если Вы полагаете, что сертификат допустим, можно добавить это к своему keystore через команду, такую как следующее:

keytool -import -alias alias -file ABCCA.cer -keystore storefile 

Эта команда создает "доверяемый сертификат" запись в keystore, имя которого - определенное в storefile. Запись содержит данные от файла ABCCA.cer, и это присваивается указанный псевдоним.

Импорт Ответа Сертификата от CA

Как только Вы импортировали необходимый доверяемый сертификат (ы), как описано в предыдущем разделе, или они уже находятся в Вашем keystore или в cacerts файл, можно импортировать ответ сертификата и таким образом заменить Ваш самоподписанный сертификат цепочкой сертификата. Эта цепочка будет любой той, возвращенной CA в ответ на Ваш запрос (если ответ CA будет цепочкой), или один созданный (если ответ CA является единственным сертификатом) при использовании ответа сертификата, и доверял сертификатам, которые уже доступны в keystore или в cacerts файл keystore.

Как пример, предположите, что Вы отправили свой запрос подписания сертификата VeriSign. Можно тогда импортировать ответ через следующий, который предполагает, что возвращенный сертификат находится в файле, определенном certReplyFile:

keytool -import -trustcacerts
    -keystore storefile
    -alias alias 
    -file certReplyFile 

Введите эту команду на одной строке.

Ответ сертификата проверяется при использовании доверяемых сертификатов от keystore и дополнительно при использовании сертификатов, сконфигурированных в cacerts файл keystore (если -trustcacerts опция определяется). Каждый сертификат в цепочке проверяется, используя сертификат на следующем уровне выше в цепочке. Вы должны доверять только высокоуровневому "корневому" сертификату CA цепочке. Если Вы уже не доверяете высокоуровневому сертификату, keytool выведет на экран цифровой отпечаток того сертификата и спросит Вас, хотите ли Вы доверять этому.

Новая цепочка сертификата указанного (псевдонимом) запись заменяет старый сертификат (или цепочка) связанный с этой записью. Старая цепочка может быть заменена, только если предоставляется допустимый keypass, пароль, используемый, чтобы защитить закрытый ключ записи. Если никакой пароль не обеспечивается и если пароль с закрытым ключом отличается от keystore пароля, пользователь запрашивается это.

Для более подробной информации о генерировании CSRs и импорте ответов сертификата, см. keytool документация:


Проблемы с примерами? Попытайтесь Компилировать и Выполнить Примеры: FAQ.
Жалобы? Поздравление? Предложения? Дайте нам свою обратную связь
.

Предыдущая страница: Предыдущий Урок
Следующая страница: Подписание Кода и Предоставление Этого Полномочия