android – Опасно ли передавать третьим лицам свой SHA1 certificate fingerprint? – Stack Overflow на русском

Запрос на сертификат на открытый ключ

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

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

Возможные случаи возникновения необходимости получения сертификата:

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

    Как именно поступать в такой ситуации, определяется регламентом
    удостоверяющего центра.

  • Поменялась актуальная информация о пользователе (например,
    изменился адрес электронной почты).
  • Сертификат пользователя отозван из-за
    компрометации ключей. В этом случае пользователю необходимо перед
    формированием запроса создать новые ключи.
  • Сертификат пользователя, установленный в системе, поврежден.

И ещё о сертификатах¶

Вот как выглядит попытка распечатать его как текст:

Как вручную проверить цепочку сертификатов¶

Иногда возникает необходимость проверить, подписан ли один сертификат другим. Это можно сделать через openssl.

Возьмём три сертификата из Go Daddy, вот они: GD_root.pem (это корневой сертификат Go Daddy), GD_good.pem, GD_bad.pem. Нам нужно проверить, подписаны ли сертификаты GD_good.pem и GD_bad.pem корневым сертификатом Go Daddy.

Для верификации используем команду openssl verify, в ней мы должны указать файл с «доверенными» сертификатами, в нашем случае это один сертификат GD_root.pem, указывается через аргумент -CAfile GD_root.pem. Также мы указываем заведомо несуществующий путь к главному хранилищу сертификатов удостоверяющих центров, чтобы в процессе верификации участвовал только один сертификат, это делается через аргумент -CApath /nope. В новых версиях openssl (начиная с 1.1.0) введён специальный новый параметр -no-CApath.

И альтернативный вариант (предыдущий в новых версиях не работает):

Корневые сертификаты удостоверяющих центров

В каждой цепочке доверия рано или поздно встречается сертификат, на
котором цепочка заканчивается. Т.е. для этого сертификата нет
сертификата, на котором его можно было бы проверить.

Такие сертификаты называются корневыми.

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

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

Цифровой отпечаток документа — это последовательность символов,
соответствующая документу таким образом, что каждому документу
соответствует свой отпечаток, и по изменению документа нельзя
определить, как изменится цифровой отпечаток. Таким образом, можно быть
уверенными, что если цифровой отпечаток документа соответствует
документу, документ подлинный и корректный. (Эта идея заложена
также в основе формирования ЭП).

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

Если цифровой отпечаток или открытый ключ в распечатке и в сертификате
совпадает, корневой сертификат считается корректным. Если цифровой отпечаток или открытый ключ в распечатке и в сертификате не совпадают, значит, файл корневого сертификата искажен.

Криптографические операции и цепочки доверия

Понятие «Проверка подписи» подразумевает проверку соответствия подписи
документу, который подписан этой подписью. Если подпись соответствует
документу, документ считается подлинным и корректным.

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

Для этого проводится проверка сертификата на этот ключ. Понятие
«проверка сертификата» означает проверку подписи под этим
сертификатом. Подпись под сертификатом проверяется на открытом ключе
того, кто создал и подписал сертификат — т.е. на открытом ключе
удостоверяющего центра.

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

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

Промежуточные сертификаты удостоверяющих центров

Промежуточные сертификаты удостоверяющих центров—это сертификаты на
ключи удостоверяющих центров, не являющиеся корневыми. Т.е. это
сертификаты удостоверяющих центров, подписанные на других сертификатах
удостоверяющих центров.

Промежуточные сертификаты могут возникнуть, к примеру:

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

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

Корневой сертификат УЦ—промежуточный сертификат УЦ—сертификат
пользователя.

Более длинные цепочки (с несколькими промежуточными сертификатами) возможны, но встречаются очень редко.

Секретный ключ¶

Главный компонент всего — криптография, точнее криптографические алгоритмы.

Всё начинается с генерации пары ключей: секретного и публичного. Сначала при помощи математической и компьютерной магии генерируется секретный ключ, а затем из него вычисляется публичный. Чаще всего для сертификатов используется алгоритм RSA, вот как это делается в консоли через программу openssl:

В этом примере мы сгенерили секретный ключ для алгоритма RSA. Собственно сам ключ находится между специальными маркерами —–BEGIN RSA PRIVATE KEY—– и —–END RSA PRIVATE KEY—–. Чтобы при генерации ключа сохранить его сразу в файл, добавьте аргумент -out private.pem:

С подобным форматом представления криптографических данных вам предстоит сталкиваться постоянно, называется он PEM, что расшифровывается как Privacy-enhanced Electronic Mail. Его предназначение — кодировать бинарные криптографические данные в виде ASCII-текста.

Мы можем при помощи openssl сконвертировать секретный ключ из текстового формата PEM в изначальный бинарный, сохраним его в файл private.der:

Имя формата данных DER расшифровывается как Distinguished Encoding Rules и является частью стандарта ASN.1. В стандарте ASN.1 описываются правила и структуры для кодирования, раскодирования и передачи данных по телекоммуникационным и компьютерным сетям.

Также существует консольная программа dumpasn1 для просмотра бинарных данных, в дебиане/убунте она ставится через sudo apt-get install dumpasn1, для макоси можно поставить через macports, через homebrew (инструкция), либо скомпилировать самостоятельно из исходников.

Вот так, например, выглядит дамп нашего созданного секретного ключа:

В нашем файле секретного ключа «упакованы» девять целых чисел, структура ключа для алгоритма RSA весьма простая и описана, например, в RFC 3447, в секции A.1.2 RSA private key syntax.

Ну и чтобы два раза не вставать, вытащим из секретного ключа публичный ключ в файл public.der, закодированный в бинарный формат DER, openssl умеет делать и это тоже:

И сразу же посмотрим на его структуру через dumpasn1:

Структура публичного ключа также описана в RFC3447, в секции A.1.1, если вы туда посмотрите, то увидите, что дамп файла public.der не соответствует этому описанию. Поздравляю с первыми граблями в openssl, с ними вам тоже придётся сталкиваться постоянно.

Для манипуляциями публичными и секретными ключами можно также использовать команду pkey, она позволяет работать с произвольными поддерживаемыми типами ключей. Вот как выглядит её вызов для вытаскивания публичного ключа из приватного:

Сертификат¶

Но хватит о ключах, поговорим теперь о сертификатах. Напомню, что сертификат — это обёртка над публичным ключом. Неформально файл сертификата состоит из двух частей: данных сертификата (DATA) и цифровой подписи (SIGNATURE).

В секции DATA содержится смысловая часть сертификата, главное поле там — Subject (он же Субъект), это владелец сертификата, именно его публичный ключ находится в поле Subject Public Key Info. Также в сертификат входят другие поля, о которых мы поговорим позже, когда будем рассматривать уточнённую схему.

В секции SIGNATURE содержится цифровая подпись всех данных из секции DATA. Напомню, что в модели PKI цифровую подпись генерирует центр авторизации, используя свой секретный ключ, удостоверяя подлинность данных сертификата.

Сертификаты

Необходимо обеспечить возможность любому пользователю в любой момент:

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

Для того, чтобы обеспечить эти требования, все открытые ключи хранятся и
передаются в виде сертификатов.

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

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

Технические подробности¶

А теперь самое главное, ради чего эта статья и писалась — технические подробности, стандарты и особенности реализации системы сертификатов.

В основе всего лежит множество индустриальных стандартов, созданных очень давно — в конце восьмидесятых и начале девяностых годов XX века. Благодаря этим стандартам, мы сейчас имеет вполне успешно функционирующую систему, несмотря на то, что отдельные её компоненты созданы совершенно разными компаниями.

Удостоверяющие центры

Создает (выпускает) сертификаты специальный административный центр,
называемый удостоверяющим центром (УЦ) или центром сертификации (ЦС).

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

Совокупность требований удостоверяющего центра называется регламентом
удостоверяющего центра.

Удостоверяющий центр имеет собственные ключи подписи и подписывает на
них все электронные документы, которые он выпускает.

Удостоверяющий центр выпускает сертификат на собственный открытый ключ.
Такой сертификат называется сертификатом удостоверяющего центра.

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

Взаимодействие пользователя с удостоверяющим центром происходит следующим образом:

  1. Пользователь создает ключевую пару (открытый и закрытый ключи).
  2. Пользователь отправляет в удостоверяющий центр запрос на
    сертификат, в который включает открытый ключ и всю необходимую
    информацию о себе и о ключах. Набор необходимых сведений определяется
    регламентом удостоверяющего центра, но всегда необходимо
    указывать имя владельца, назначение ключей, дату создания.
  3. Удостоверяющий центр получает запрос и проверяет его подлинность и
    корректность. Как именно это делается, определяется регламентом
    удостоверяющего центра.
  4. Если результат проверки запроса положительный, удостоверяющий
    центр создает сертификат на открытый ключ, подписывает его, заносит в
    свою базу данных и отправляет пользователю.
  5. Пользователь получает сертификат и устанавливает его у себя в
    системе.

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

Отзыв сертификата

Существует ряд причин, по которым действие сертификата бывает необходимо
прекратить до окончания его срока действия.

Такими причинами, в частности, могут быть:

  • Компрометация соответствующего закрытого ключа. Если несанкционированный доступ к закрытому ключу все же имел место или
    обнаружена хотя бы возможность такого доступа, закрытый ключ, а также
    парный к нему открытый считаются скомпрометированными. Работать с такими
    ключами нельзя.
  • Замена сертификата (например, в связи с изменением адреса
    электронной почты пользователя).
  • Задержка действия сертификата.

В таких ситуациях удостоверяющий центр отзывает соответствующий
сертификат.

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

Удостоверяющий центр отзывает соответствующий сертификат, т.е. заносит
его в так называемый список отзыва сертификатов (CRL — Certificate
Revocation List). Все сертификаты, числящиеся в списке отзыва
сертификатов, недействительны. Список отзыва сертификатов доводится до сведения всех пользователей в соответствии с регламентом удостоверяющего центра.

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

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

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

Конец срока действия сертификата

Каждый сертификат имеет ограниченный срок действия. Конкретный
максимальный срок действия сертификата устанавливается регламентом УЦ,
но обычно он не превышает одного года.

По истечении срока действия сертификат становится недействительным.

По истечении срока действия сертификата удостоверяющего центра
необходимо получить и установить в системе новый.

По истечении срока действия сертификата на открытый ключ пользователя
необходимо сформировать запрос на новый сертификат.

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

Про сертификаты:  Руководство педагогический научно педагогический состав
Оцените статью
Мой сертификат
Добавить комментарий