Что такое отпечаток сертификата
Что такое отпечаток сертификата
Что такое отпечаток сертификата (Certificate thumbprint)
И так про определение хэша и его виды, я вам подробно уже рассказывал, кто не видел эту статью, советую ее посмотреть, будет очень познавательно. Там алгоритмов очень много, нас это сегодня не интересует, нам нужно его значение. Я покажу вам два метода, но уверен, что их гораздо больше.
Узнаем кэш сертификата в браузере
Найдите любой интересующий вас сайт, я выберу свой проект https://basis.myseldon.com/ru. Как видите у него есть сертификат, об этом говорит замочек перед адресом сайта.
Чтобы посмотреть сертификат используемый в нем, вам нужно просто на него щелкнуть, в Internet Explore этого достаточно, но в Google Chrome придется сделать вот таким методом. Далее вы заходите во вкладку «Состав» и находите поле «Отпечаток», именно это значение и будет вам показывать хэш сертификата.
Если вы используете сертификат для подписи и он установлен у вас локально, то откройте оснастку mmc сертификаты и в ветке личное найди нужный, далее все как описано выше.
Через командную строку
Откройте командную строку cmd и введите команду:
Как видите, данный метод еще быстрее, для примера я вам показал вывод командной строки и сертификат открытый в Internet Explore. Надеюсь вам помогла данная информация в поиске значения хэш у сертификата.
Получить отпечаток сертификата с помощью PowerShell
Если вам необходимо получить отпечаток сертификата через PowerShell, то запустите оболочку и введите команду:
У вас будет столбец Thumbprint, это и есть отпечаток сертификата, в моем примере, это сертификат для Windows Admin Center.
Та же можно вывести более детальную информацию по сертификатам и сделать небольшое форматирование выходных данных:
В результате полезное еще видеть столбец NotAfter для понимания срока действия сертификата.
Как работает электронная подпись
Одно из полезных применений асимметричного шифрования — работа с электронной подписью. Рассказываем, как устроена ЭП изнутри и где она применяется.
Что такое электронная подпись
Электронная подпись — это технология, которая помогает подтвердить подлинность электронного документа: договора, справки, выписки или чего-то ещё.
Если упрощённо, работает так:
👉 Есть некий документ, подписанный ЭП
👉 С помощью специальной программы можно проверить подлинность этой подписи и документа
✅ Если программа говорит, что всё окей, то мы можем быть уверены: документ подписал именно тот, кто в нём указан; и с момента подписания в документе ничего не изменилось.
❌ Или программа может сказать, что подпись не совпала. Это значит, что либо документ подписал другой человек, либо после подписания кто-то изменил этот документ (например, дописал ноль в стоимость контракта). Так мы поймём, что этому документу нельзя доверять.
С технической точки зрения ЭП — небольшой файлик, который прилагается к искомому документу. Файлик пересылается вместе с основным документом, его можно передавать по открытым каналам связи, в нём нет ничего секретного.
Электронная подпись нужна, чтобы защищать договоры, выдавать официальные справки, заключать сделки и участвовать в торгах по госзакупкам.
Основа ЭП — асимметричное шифрование
Как работает: сертификаты
Электронная подпись состоит из двух принципиальных частей:
Грубо говоря, ЭП должна гарантировать, что документ подписали именно вы и что вы подписали именно этот документ.
В сертификате хранятся данные о владельце подписи:
Но смысл сертификата не в том, что там хранятся эти данные, а в том, кто эти данные туда положил. В России сертификаты и ЭП выдают специальные удостоверяющие центры — это компании, которые гарантируют, что сертификат выдаётся именно тому, кто в этом сертификате указан.
Чтобы получить сертификат, вы приходите лично в эту компанию (удостоверяющий центр), показываете документы, фотографируетесь. Вас заносят в базу удостоверяющего центра и выдают ключи электронной подписи. Так все участники электронного документооборота будут уверены, что все документы, подписанные вашими ключами, подписаны именно вами.
Как работает: алгоритмы шифрования
Допустим, вы уже сходили в удостоверяющий центр и получили на флешке сертификат и ключ электронной подписи. Теперь нужно скачать специальный софт, который и будет подписывать ваши документы и проверять чужие на подлинность.
Проблема в том, что ЭП основана на алгоритмах асимметричного шифрования, а их много: разложение на простые множители, дискретное логарифмирование, эллиптические кривые и множество других. Ключ из одного алгоритма не подойдёт для использования в другом, поэтому в России договорились использовать стандарт шифрования ГОСТ Р 34.10-2012, основанный на эллиптических кривых. Все государственные органы работают только с таким алгоритмом и не принимают другие ЭП.
Это значит, что нам нужен специальный софт, в котором уже есть этот алгоритм. Чаще всего используют КриптоПРО, реже — ViPNet CSP. С помощью этих программ можно подписать документы и проверить сертификаты на подлинность.
Принцип работы электронной подписи
Электронная подпись — это асимметричное шифрование наоборот: вы зашифровываете закрытым ключом, а расшифровать может кто угодно с помощью открытого ключа, который доступен всем.
👉 Если открытый ключ подходит к сообщению и расшифровывает его, значит, оно было зашифровано именно этим закрытым ключом — то есть именно вами.
А что если подменят сам сертификат?
Все сертификаты, которые выдаёт удостоверяющий центр, тоже подписываются электронной подписью. Чтобы проверить подлинность сертификата, можно зайти на официальный сайт удостоверяющего центра и скачать открытый ключ для проверки. Если хеш самого сертификата совпадает с хешем, который мы получили с помощью открытого ключа с сайта — значит, и сам сертификат подлинный.
Разбираем x.509 сертификат
Привет, %username%!
Так уж вышло, что несмотря на относительно неплохое понимание инфраструктуры открытых ключей, содержимое *.crt файлов всегда оставалось для меня полнейшей загадкой.
Нет, не поймите неправильно. Я знаю, что x.509 сертификат содержит информацию о владельце, открытый ключ, сведения об удостоверяющем центре и электронную цифровую подпись. Но при установке очередного сертификата меня всегда мучило любопытство.
Чем отличается идентификатор ключа от отпечатка? Какие данные сертификата подписываются, а какие нет? И что за структура данных позволяет хранить всю эту информацию, сводя избыточность к минимуму.
Но вот наконец-то любопытство перебороло лень и в данном посте я постараюсь описать структуру x.509 сертификатов и ответить на эти и другие вопросы.
Часть 1. Самоподписанный сертификат
В результате выполнения данной процедуры будет создан стандартный x.509 сертификат, который, будучи открытым с помощью hex-редактора, выглядит вот таким чудесным образом:
Тот же самый сертификат, но уже открытый с помощью стандартных средств windows:
Имея два этих файла, один с двоичными данными, а другой с описанием сертификата, попробуем разобраться что здесь к чему.
Прежде всего, нужно отметить, что файл *.crt хранит информацию о сертификате в закодированном виде. Для кодирования применяется особый язык, называемый ASN.1.
ASN.1 — стандарт записи, описывающий структуры данных для представления, кодирования, передачи и декодирования данных. Wikipedia
Однако ASN.1 разрабатывался в те светлые времена, когда «640 КБ должно было хватать каждому» и тратить место на такую громоздкую запись не было никакой возможности. Поэтому, в целях экономии места, а также более удобной обработки хранимой в ASN.1-форме информации, был разработан специальный метод кодирования — DER.
DER-кодировка описывается следующим правилом. Первым записывается байт, характеризующий тип данных, затем последовательность байтов хранящих сведения о длине данных и затем уже записываются сами данные.
К примеру, для кодировки целого числа INTEGER 65537 используется следующая форма: 02 03 01 00 01.
Здесь первый байт 02, определяет тип INTEGER (полную таблицу типов вы можете найти например тут), второй байт 03 показывает длину блока. А следующие за этим байты 01 00 01, являются шестнадцатеричной записью нашего числа 65537.
В нашем случае, для описание простейшего самоподписаного сертификата, достаточно 9 типов данных. Приведем таблицу кодирования для этих типов:
Наименование типа | Краткое описание | Представление типа в DER-кодировке |
---|---|---|
SEQUENCE | Используется для описания структуры данных, состоящей из различных типов. | 30 |
INTEGER | Целое число. | 02 |
OBJECT IDENTIFIER | Последовательность целых чисел. | 06 |
UTCTime | Временной тип, содержит 2 цифры для определения года | 17 |
GeneralizedTime | Расширенный временной тип, содержит 4 цифры для обозначения года. | 18 |
SET | Описывает структуру данных разных типов. | 31 |
UTF8String | Описывает строковые данные. | 0C |
NULL | Собственно NULL | 05 |
BIT STRING | Тип для хранения последовательности бит. | 03 |
Зная как кодируется каждый из этих типов, мы можем попытаться распарсить наш *.crt файл.
30 82 01 8F 30 81 F9 A0 03 02 01 02 02 01 01 30
0D 06 09 2A 86 48 86 F7 0D 01 01 05 05 00 30 0D
31 0B 30 09 06 03 55 04 03 0C 02 43 41 30 20 17
0D 31 33 30 39 31 35 31 35 33 35 30 32 5A 18 0F
32 31 31 33 30 39 32 32 31 35 33 35 30 32 5A 30
0D 31 0B 30 09 06 03 55 04 03 0C 02 43 41 30 81
9F 30 0D 06 09 2A 86 48 86 F7 0D 01 01 01 05 00
03 81 8D 00 30 81 89 02 81 81 00 8D 80 B5 8E 80
8E 94 D1 04 03 6A 45 1A 54 5E 7E EE 6D 0C CB 0B
82 03 F1 7D C9 6F ED 52 02 B2 08 C3 48 D1 24 70
C3 50 C2 1C 40 BC B5 9D F8 E8 A8 41 16 7B 0B 34
1F 27 8D 32 2D 38 BA 18 A5 31 A9 E3 15 20 3D E4
0A DC D8 CD 42 B0 E3 66 53 85 21 7C 90 13 E9 F9
C9 26 5A F3 FF 8C A8 92 25 CD 23 08 69 F4 A2 F8
7B BF CD 45 E8 19 33 F1 AA E0 2B 92 31 22 34 60
27 2E D7 56 04 8B 1B 59 64 77 5F 02 03 01 00 01
30 0D 06 09 2A 86 48 86 F7 0D 01 01 05 05 00 03
81 81 00 0A 1C ED 77 F4 79 D5 EC 73 51 32 25 09
61 F7 00 C4 64 74 29 86 5B 67 F2 3D A9 39 34 6B
3C A9 92 B8 BF 07 13 0B A0 9B DF 41 E2 8A F6 D3
17 53 E1 BA 7F C0 D0 BC 10 B7 9B 63 4F 06 D0 7B
AC C6 FB CE 95 F7 8A 72 AA 10 EA B0 D1 6D 74 69
5E 20 68 5D 1A 66 28 C5 59 33 43 DB EE DA 00 80
99 5E DD 17 AC 43 36 1E D0 5B 06 0F 8C 6C 82 D3
BB 3E 2B A5 F1 94 FB 53 7B B0 54 22 6F F6 4C 18
1B 72 1C
Преобразуя байты-идентификаторы типов и убирая байты описывающие длину блоков получим следующую структуру:
Важным моментом, о котором стоит особенно упомянуть являются данные, для которых вычисляется подпись. Интуитивно может показаться, что подписываются все данные идущие до последнего поля BIT STRING, содержащего подпись. Но на самом деле это не так. В стандарте x.509 подписывается определенная часть сертификата, называемая TBS-сертификат (to be signed). В TSB-сертификат входит последовательность SEQUENCE второго уровня со всеми вложенными данными.
Т.о. если перед вами будет стоять задача проверить ЭЦП x.509 сертификата, то для этого сперва необходимо извлечь TBS-сертификат.
Еще одно замечание относится к отпечатку сертификата. Как видите сам сертификат не содержит никаких сведений об отпечатке. Это объясняется тем, что отпечаток представляет собой обычное хеш-значение SHA-1 от всего файла сертификата, со всеми его полями, включая подпись издателя. Поэтому хранить отпечаток не обязательно, можно просто вычислять хеш при каждом просмотре сертификата.
Часть 2. Сертификат 2-го уровня
Мы с вами рассмотрели внутренности самоподписанного сертификата, и нам осталось понять чем отличается структура сертификатов более низкого уровня, от сертификата корневого центра.
Для этого, с помощью имеющегося у нас секретного ключа сертификата CA, создадим подчиненный ему сертификат user. И в этом нам снова поможет Bouncy Castle.
Распарсив наш сертификат и преобразовав его к читаемому виду, получим следующую красоту:
Как видите, единственное отличие от самоподписанного сертификата заключается в наличие дополнительного блока:
который содержит сведения об издателе сертификата и его открытом ключе. Вот тут я хотел бы добавить одно замечание. Без этого блока сертификат все равно будет оставаться рабочим, т.к. информация хранящаяся здесь считается не более, чем дополнением, более точно указывающим каким из ключей издателя был подписан текущий сертификат. Рассмотрим каждый элемент блока отдельно.
Заключение
Тех усидчивых людей, которые продрались сквозь все эти ASN.1 выражения и шестнадцатеричные наборы данных, я хотел бы поблагодарить за прочтение. Надеюсь вам было хоть немного интересно. И стало чуточку понятнее, что же такое на самом деле X.509 сертификат.
Практическое руководство. Получение отпечатка сертификата
при написании приложения Windows Communication Foundation (WCF), использующего сертификат X. 509 для проверки подлинности, часто бывает необходимо указать утверждения, найденные в сертификате. Например, при использовании перечисления FindByThumbprint в методе SetCertificate необходимо указать утверждение отпечатка. Чтобы найти значение утверждения, необходимо выполнить два действия. Сначала необходимо открыть оснастку сертификатов консоли управления (MMC). (См. раздел как просмотреть сертификаты с помощью оснастки MMC.) Во-вторых, как описано здесь, найдите подходящий сертификат и скопируйте его отпечаток (или другие значения утверждений).
Вы также можете использовать командлет PowerShell New-SelfSignedCertificate, чтобы создать временные сертификаты для использования только во время разработки. Однако по умолчанию такой сертификат не выдается центром сертификации и не может использоваться в производственных целях. Дополнительные сведения см. в разделе инструкции. Создание временных сертификатов для использования во время разработки.
Извлечение отпечатка сертификата
Откройте оснастку «Сертификаты» консоли управления (MMC). (См. раздел How to: View Certificates with the MMC Snap-in).
В левой области окна Корень консоли щелкните узел Сертификаты (локальный компьютер).
Дважды щелкните сертификат.
Найдите в списке поле Отпечаток и щелкните его.
Словарь терминов раздела «Электронная подпись»
Специальная библиотека для использования электронной подписи (ЭП) в браузере. Она необходима для работы на некоторых электронных торговых площадках и порталах для сдачи отчетности.
Библиотека «Капиком» входит в пакет программ мастера настройки рабочего места УЦ «Тензор», но может быть установлена и как отдельная компонента.
Разработчик «Капиком» — компания Microsoft. Тензор обслуживанием Capicom не занимается.
Квалифицированная электронная подпись (КЭП)
Подтверждает подлинность электронной подписи. Выпускается удостоверяющим центром (УЦ) и содержит информацию о нем. При проверке подписи криптопровайдер строит цепочку: сертификат пользователя — кросс-сертификат УЦ (может отсутствовать) — корневой сертификат головного УЦ (Минкомсвязи). Корневой сертификат также называют самоподписанным, потому что УЦ выдает его самому себе (совпадают поля «Кем выдан» и «Кому выдан»). Если такой сертификат не установлен в хранилище «Доверенные корневые», то все подписи, выданные на нем, будут отражаться с ошибкой «Последний сертификат цепи не является доверенным корневым сертификатом».
Сертификат, выпускаемый одним УЦ для другого для построения цепочки сертификации.
Неквалифицированная электронная подпись (НЭП)
Простая электронная подпись (ПЭП)
Для электронной подписи выступает как носитель ключа. В общем смысле реестр — это база, где хранятся параметры и настройки операционной системы Windows.
Часть ключевой пары в ЭП, которая доступна любому пользователю информационной системы. Должна соответствовать закрытому ключу. Служит для шифрования и проверки электронной подписи под документом.
Секретный (закрытый) ключ
Второй компонент ключевой пары в ЭП. Секретная информация, используемая для создания электронной подписи и расшифровки сообщений.
Лицензия на установку и эксплуатацию одной копии продукта СБИС на ПК под управлением серверной версии ОС Windows. Компания «Тензор» не является разработчиком СКЗИ.
Сертификат или сертификат ключа подписи
Электронный или бумажный документ, идентифицирующий владельца ключа. Обязательно содержит в себе открытый ключ и сведения о владельце подписи, сроке ее действия, значении ЭП и области применения, а также об удостоверяющем центре, выдавшем ключ.
С помощью сертификатов происходит обмен информацией в интернете. Для работы в СБИС они должны быть установлены в карточке каждого участника электронного документооборота и иметь статус «Сертификат действителен».
Средство криптографической защиты информации (СКЗИ)
Программа (служба), которая обеспечивает шифрование и работу с электронной подписью на компьютере.
Факсимильная подпись, факсимиле
Точное воспроизведение каким-либо способом (фотографическим, ксерографическим, печатным и т.п.) рукописной подписи.
Преобразование по определенному алгоритму данных произвольной длины в битовую строку фиксированной длины. Такие преобразования также называются хеш-функциями, а их результаты называют хешем или хеш-значением.
Хеш-функция гарантирует, что если информация будет любым образом изменена даже на один бит, то в результате получится совершенно иное хеш-значение. Из хеш-значения восстановить документ нельзя.
Преобразование информации с целью ее безопасного хранения и передачи. Все способы шифрования можно разделить на два вида:
- Что такое сесть в лужу
- Что такое последняя реплика в диалоге это