- О сертификате: что это такое
- Введение
- В операционной системе windows xp
- В реестре
- В системе linux
- Где хранятся сертификаты
- Где хранятся сертификаты эцп на компьютере?
- Извлечение сертификата из контейнера
- Как скопировать эцп из реестра на флешку
- Как установить сертификат эцп на компьютер с помощью крипто про: способ № 2
- Криптопро csp ошибка 0x80090010 отказано в доступе
- Общесистемные корневые ca сертификаты
- Ошибка копирования контейнера
- Пин-код от токена электронной подписи
- Причины возникновения ошибок
- Просмотр ключей эв через консоль управления
- Просмотр сертификатов через специальное по
- Решение №2. подбор пин-кода и права администратора
- С помощью консоли управления
- Состав: из чего состоит сертификат эп
- Часть 1. самоподписанный сертификат
- Через «криптопро»
О сертификате: что это такое
Сертификат ключа ЭЦП — это документ, несущий информацию о владельце. В открытом ключе зашифрованы данные о статусе владельца, реквизитах и полномочиях. Сертификат подтверждает принадлежность ключа конкретному лицу, отвечающему за его применение.
Документ имеет электронный цифровой или бумажный вариант. Выдача сертификата электронного ключа происходит в удостоверяющем центре. Вся информация о сертификатах хранится в едином федеральном реестре. УЦ гарантирует соответствие предоставленных данных действительности, подтверждает личность владельца и защищает цифровой ключ от взлома.
Электронная цифровая подпись (ЭЦП) — аналог рукописного варианта подписи владельца. Используется в документообороте и при работе с электронными системами управления финансами. ЭП составляет электронный сертификат, выданный удостоверяющим центром.
Цифровой аналог реальной подписи делится на квалифицированный и неквалифицированный тип. В зависимости от профиля у электронного сертификата есть уровень допуска для работы с теми или иными ресурсами. Квалифицированный вариант обладает самой высокой степенью защиты, благодаря чему его применяют в операциях с недвижимостью, финансами и для подписания документов.
Информация о сертификатах хранится в базах Единого реестра ЕСИА. Вносить данные имеют право удостоверяющие центры, прошедшие сертификацию. Все УЦ делятся на аккредитованные и неаккредитованные.
Введение
Мне постоянно приходится иметь дело с сертификатами, токенами, закрытыми ключами, криптопровайдерами и прочим. Сейчас все завязано на это – банкинг, сдача отчетности в разные гос органы, обращения опять же в эти органы, в том числе и физ лиц. В общем, с этой темой рано или поздно придется познакомиться многим.
- Перенести или скопировать контейнер закрытого ключа через стандартную оснастку CryptoPro в панели управления. Это самый простой и быстрый способ, если у вас не много сертификатов и ключей. Если же их несколько десятков, а это не такая уж и редкость, то такой путь вам не подходит.
- Скопировать сертификаты и ключи непосредственно через перенос самих исходных файлов и данных, где все это хранится. Объем работы одинаков и для 5 и для 50-ти сертификатов, но требуется больше усилий и знаний.
Я опишу оба этих способа, но подробно остановлюсь именно на втором способе. В некоторых ситуациях он является единственно возможным.
Важное замечание. Я буду переносить контейнеры закрытого ключа, которые хранятся в реестре. Если вы храните их только на токене, то переносить контейнеры вам не надо, только сертификаты.
В операционной системе windows xp
В ОС Windows XP открытые ключи размещаются в персональном хранилище. От несанкционированного изменения общедоступные сведения защищает электронная подпись аккредитованного центра сертификации. Для просмотра ищем папку Documents and Setting. После этого вводится следующая информация:
- имя пользователя;
- ApplicationData;
- Microsoft SystemCertificates;
- My Certificates;
- наименование профиля.

Открытые сертификаты регистрируются в локальном реестре. Процедура повторяется при каждом входе в систему Windows Server.
В перемещаемых пользовательских профилях контейнер закрытого ключа хранится в папке RSA на доменном контроллере, защищенном специальным шифрованием с использованием симметричного кода. Для создания базового шифра, состоящего из 64 символов, задействуется генератор случайных чисел. Загрузка сертификационного файла выполняется на время работы компьютера.
В реестре
Допускается хранить сертификаты ЭЦП в реестре по аналогии со стандартными ключевыми носителями. Найти перенесенные ключи цифровой подписи можно в папках:

Под Keys SID подразумевается персональное пользовательское имя, удостоверяющее подлинность подписи.
В системе linux
Задействовав утилиту Csptest, размещенную в директории /opt/cprocsp/bin/<архитектура>, находят сертификационные файлы ЭЦП в операционной системе Linux.
Перечень открытых ключей персонального компьютера: csptest -keyset -enum_cont -verifycontext -fqcn -machinekeys.
Список сертификатов пользователя: csptest -keyset -enum_cont -verifycontext -fqcn.

На жестком диске размещено хранилище HDImageStore, куда заносятся закрытые ключи. Доступ к ним открыт и для JCP.
Для хранения сертификатов в ОС Linux создается специальная директория. Путь к ним открывается вручную вводом особых команд.
Где хранятся сертификаты
Для хранения сертификатов используются специальные хранилища. В системе они представлены обычно 2-мя типами:
- хранилище локального компьютера
- хранилище текущего пользователя.
Пользователь с правами администратора имеет возможность просмотра всех хранилищ. Обычные пользователи, не обладающие правами администратора, имеют доступ лишь ко второму типу.
В хранилище локального компьютера содержатся сертификаты глобальные для всех пользователей, а в хранилище текущего пользователя находятся сертификаты для конкретной учетной записи.
В свою очередь хранилища внутри разделяются на вложенные хранилища, т.е. сертификаты группируются в зависимости от назначения сертификата.
Сертификаты для текущего пользователя наследуют содержимое хранилищ с сертификатами локального компьютера.
Где хранятся сертификаты эцп на компьютере?
Все сертификаты, установленные на компьютер, размещены в специальном хранилище — отдельной папке в реестре Windows. Чтобы просматривать их, нужно войти в систему с правами администратора. Файл с сертификатом «весит» несколько килобайт. Зная, где хранятся сертификаты ЭЦП на компьютере, нетрудно понять, как к ним добраться:
- Нажмите комбинацию Win R. Всплывет окно «Выполнить» с пустой строкой. Введите туда certmgr.msc. Согласитесь, нажав «ОК».

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

- Для ознакомления с информацией о сертификате кликните на него правой кнопкой мыши и укажите «Открыть».

Существует еще один способ, который поможет попасть в хранилище к сертификатам:
- Откройте «Пуск» и перейдите в «Панель управления».
- Перейдите в «Свойства обозревателя».
- Откройте «Содержание» — «Сертификаты».
- Всплывет окно со списком сертификатов.
Посмотреть данные по ним можно при нажатии на «Просмотр».
Извлечение сертификата из контейнера
Как извлечь сертификат из контейнера закрытого ключа:
- Запустить КриптоПро CSP.
- Перейти во вкладку «Сервис».
- Нажать «Посмотреть сертификаты в контейнере».
- В новом окне будет список контейнеров закрытого ключа, из которого выбирают нужный, и нажимают «ОК».
- При необходимости ввести pin-код и нажать «ОК».
- В открывшемся окне необходимо нажать кнопку «Свойства».
- Перейти на вкладку «Состав» и нажать кнопку «Копировать».
- В новом окне нажимают «Далее» и выбирают пункт «Не экспортировать закрытый ключ».
- В следующем рабочем окне выбирают первый пункт кодировки.
- Затем нажимают «Обзор», выбирают путь сохранения сертификата и указывают имя файла, нажимают «Сохранить».
Для завершения процесса нужно нажать на кнопку «Далее», затем «Готово».
Как скопировать эцп из реестра на флешку
Предположим, что у вас стоит задача скопировать контейнер из реестра, так как он уже там, то он экспортируемый, для этого открываем криптопро, «Сервис-Скопировать»
Выбираете «Обзор» и ваш сертификат из реестра.
Задаете ему новое имя, удобное для себя.
После чего вас попросят указать флешку, на которую вы будите копировать контейнер с закрытым ключом из реестра.
Обязательно задайте новый пароль.
Ну и собственно теперь открывайте вашу флешку и лицезрейте перенесенный на него контейнер, он будет состоять из файликов с форматом key.
Как видите КриптоПРО, это конвейер, который позволяет легко скопировать сертификат из реестра на флешку или даже дискету, если они еще используются.
Как установить сертификат эцп на компьютер с помощью крипто про: способ № 2
Если программа автоматически не находит открытый ключ в контейнере закрытого, придется воспользоваться другим способом, чтобы установить сертификат ЭЦП на компьютер. Потребуется файл, который должен быть записан на флешке, с расширением .cer в имени.
- Кликните в КриптоПро CSP на «Установить личный сертификат».

- Кликните «Обзор» и найдите на флешке файл .cer.


- Если программа распознала файл, можете нажимать «Далее». Ознакомившись со свойствами сертификата, снова кликните «Далее».


- Найдите ключевой контейнер, нажав на «Обзор». Укажите внешний носитель — флешку. Нажмите «ОК».


- Перейдите «Далее», а затем найдите хранилище для сертификата, нажмите «Обзор», предварительно поставив отметку около надписи, подтверждающей установку сертификата в контейнер.


- Отметьте папку для хранения сертификата ЭЦП. Подтвердите действия и завершите установку, нажав «Готово» в следующем окне.


Этот способ установки сертификата ЭЦП сложнее предыдущего, но в некоторых случаях доступен только он.
Криптопро csp ошибка 0x80090010 отказано в доступе
Иногда после переноса контейнеров закрытых ключей через экспорт – импорт ветки реестра с ключами можно увидеть ошибку доступа к контейнерам. Вроде бы все на месте, ключи есть в реестре. Их можно увидеть в останстке CryptoPro, но не получается прочитать. При попытке это сделать возникает ошибка:
Ошибка обращения к контейнеру закрытого ключа. Ошибка 0x80090010: Отказано в доступе. Связано это с тем, что у текущего пользователя, под которым вы хотите получить доступ к контейнеру, нет полных прав на ветку реестра с хранящимися ключами. Исправить это просто. Переходите в редактор реестра и выставляйте полные права к ветке Keys для текущего пользователя.
Убедитесь так же, что новые права наследовались на дочерние ветки с самими ключами. Обычно это так, но перепроверить на всякий случай непомешает. После этого ошибка с доступом к контейнеру закрытого ключа исчезнет.
Общесистемные корневые ca сертификаты
Если вы задаётесь вопросом, в какой папке хранятся сертификаты в Windows, то правильный ответ в том, что в Windows сертификаты хранятся в реестре. Причём они записаны в виде бессмысленных бинарных данных. Чуть ниже будут перечислены ветки реестра, где размещены сертификаты, а пока давайте познакомимся с программой для просмотра и управления сертификатами в Windows.
В Windows просмотр и управление доверенными корневыми сертификатами осуществляется в программе Менеджер Сертификатов.
Чтобы открыть Менеджер Сертификатов нажмите Win r, введите в открывшееся поле и нажмите Enter:
certmgr.msc
Перейдите в раздел «Доверенные корневые центры сертификации» → «Сертификаты»:
Здесь для каждого сертификата вы можете просматривать свойства, экспортировать и удалять.
Просмотр сертификатов в PowerShell
Чтобы просмотреть список сертификатов с помощью PowerShell:
Get-ChildItem cert:LocalMachineroot | format-list
Чтобы найти определённый сертификат выполните команду вида (замените «HackWare» на часть искомого имени в поле Subject):
Get-ChildItem cert:LocalMachineroot | Where {$_.Subject -Match "HackWare"} | format-listТеперь рассмотрим, где физически храняться корневые CA сертификаты в Windows. Сертификаты хранятся в реестре Windows в следующих ветках:
Сертификаты уровня пользователей:
Сертификаты уровня компьютера:
- HKEY_LOCAL_MACHINESoftwareMicrosoftSystemCertificates — содержит настройки для всех пользователей компьютера
- HKEY_LOCAL_MACHINESoftwarePoliciesMicrosoftSystemCertificates — как и предыдущее расположение, но это соответствует сертификатам компьютера, развёрнутым объектом групповой политики (GPO (Group Policy))
Сертификаты уровня служб:
- HKEY_LOCAL_MACHINESoftwareMicrosoftCryptographyServicesServiceNameSystemCertificates — содержит настройки сертификатов для всех служб компьютера
Сертификаты уровня Active Directory:
- HKEY_LOCAL_MACHINESoftwareMicrosoftEnterpriseCertificates — сертификаты, выданные на уровне Active Directory.
И есть несколько папок и файлов, соответствующих хранилищу сертификатов Windows. Папки скрыты, а открытый и закрытый ключи расположены в разных папках.
Пользовательские сертификаты (файлы):
Компьютерные сертификаты (файлы):
- C:ProgramDataMicrosoftCryptoRSAMachineKeys
Рассмотрим теперь где хранятся корневые CA сертификаты веб-браузеров.
Ошибка копирования контейнера
Но тут есть важный нюанс. Если во время создания закрытого ключа он не был помечен как экспортируемый, скопировать его не получится. У вас будет ошибка:
Ошибка копирования контейнера. У вас нет разрешений на экспорт ключа, потому что при создании ключа не был установлен соответствующий флаг. Ошибка 0x8009000B (-2146893813) Ключ не может быть использован в указанном состоянии. Либо вы просто не сможете его выбрать для копирования, если у вас последняя версия CryptoPro. Он будет неактивен:
Если получили такую ошибку, то для вас этот способ переноса не подходит. Можно сразу переходить к следующему. Отдельно расскажу, как скопировать сертификат и закрытый ключ к нему в файл, чтобы перенести на другой компьютер без использования токена. Делаем это там же на вкладке Сервис в оснастке CryptoPro. Нажимаем Посмотреть сертификаты в контейнере.
Выбираем необходимый сертификат и нажимаем Посмотреть свойства сертификата.
Далее переходим на вкладку Состав в информации о сертификате и нажимаем Копировать в файл.
Если у вас после слов “Экспортировать закрытый ключ вместе с сертификатом” нет возможности выбрать ответ “Да, экспортировать закрытый ключ”, значит он не помечен как экспортируемый и перенести его таким способом не получится. Можно сразу переходить к другому способу, который описан ниже.
Если же такая возможность есть, то выбирайте именно этот пункт и жмите Далее. В следующем меню ставьте все галочки, кроме удаления. Так вам будет удобнее и проще в будущем, если вдруг опять понадобится копировать ключи уже из нового места.
Укажите какой-нибудь пароль и запомните его! Без пароля продолжить нельзя. В завершении укажите имя файла, куда вы хотите сохранить закрытый ключ. Теперь вам нужно скопировать сам сертификат. Только что мы копировали закрытый ключ для него. Не путайте эти понятия, это разные вещи.
Сохраните сертификат для удобства в ту же папку, куда сохранили закрытый ключ от него. В итоге у вас должны получиться 2 файла с расширениями:
Вам достаточно перенести эти 2 файла на другой компьютер и кликнуть по каждому 2 раза мышкой. Откроется мастер по установке сертификатов. Вам нужно будет выбрать все параметры по умолчанию и понажимать Далее. Сертификат и контейнер закрытого ключа к нему будут перенесены на другой компьютер.
Пин-код от токена электронной подписи
Пин-код используется для электронной подписи, которая записана на носитель в виде usb-флешки — на токен. Пин защищает токен, поэтому, если мошенники украдут носитель ЭП, то самой подписью они воспользоваться не смогут.
Впервые владелец ЭП должен ввести пин-код при выпуске подписи — когда ее записывают на токен. Если носитель новый, то нужно ввести «заводское» стандартное значение, например, 12345678 для Рутокена. «Заводское» значение лучше сразу изменить на собственное, чтобы его не смогли подобрать злоумышленники.
После этого пин-код понадобится вводить, чтобы установить сертификат подписи на компьютер, использовать и копировать ЭП, работать с ней за новым компьютером. Чтобы не вводить комбинацию каждый раз, можно нажать галочку «Запомнить пароль». Главное в таком случае самим не забыть последовательность символов.
Причины возникновения ошибок
При контроле достоверности могут возникнуть ошибки в ЭЦП. Чаще всего они связаны со следующими причинами:
Проверить работоспособность ЭЦП можно с КриптоПРО CSP. Для этого зайдите в приложение и выполните следующие действия:
После завершения процедуры появится отчет с указанием типов ошибок. Их можно скопировать и отправить в службу технической поддержки удостоверяющего центра.
Если у вас еще нет электронной подписи, Удостоверяющий Центр «Астрал-М» предлагает широкий выбор тарифных планов ЭЦП. У нас можно купить электронную подпись для решения любых рабочих задач, наши специалисты помогут вам выбрать подпись, отвечающую вашим потребностям. Чтобы её приобрести, заполните форму обратной связи.
Просмотр ключей эв через консоль управления
Алгоритм поиска и просмотра сертификатов через консоль управления выглядит следующим образом:
- Нажать одновременно клавиши Win и R, ввести в появившуюся строку «cmd» и нажать кнопку Enter.
- Ввести команду «mmc» и снова нажать на Enter.
- Выбрать пункт «Файл» и кликнуть на «Добавить или удалить оснастку».
- Кликнуть «Добавить» — «Добавить изолированную оснастку».
- Нажать на «Сертификаты».
Для осуществления манипуляций этим методом необходимо обладать правами администратора ПК.
Стоит отметить, что такой способ просмотра специальных документом обладает обширным функционалом. С его помощью можно удалять, добавлять, копировать контейнеры ЭЦП и т.д. Однако для произведения некоторых действий нужно использовать специальные команды (осуществлять их через командную строку), что может вызвать неудобства у рядовых пользователей.
Просмотр сертификатов через специальное по
Для работы с ЭЦП используется специальное программное обеспечение – криптовайдеры. Программа Крипто Про позволяет работать со специальными бумагами УЦ, а также визировать документы, проверять подписи на подлинность и т.д.
Есть еще один вариант как найти файл сертификата ЭЦП на компьютере при помощи Крипто Про, необходимо следовать такому алгоритму:
- Войти в меню «Пуск».
- Найти среди прочих программ «КриптоПро», навести мышь на нее.
- Нажать кнопку «Сертификаты».
После этого откроется окно, в котором будет полный список специальных документов, установленных на данный ПК. Здесь же можно управлять ими – просматривать подробные сведения о каждом, удалять.
Стоит обратить внимание на функцию «Скопировать весь контейнер» — она позволяет скопировать открытый ключ и специальный документ ЭЦП для использования визы на другом ПК.
Для просмотра сертификатов через КриптоПРО пользователь должен иметь статус администратора ПК, либо разрешение от администратора на совершение подобных операций. Если же пользователь вошел в систему как «Гость», то программа выдаст ошибку и ограничит доступ к списку специальных документов.
Стоит отметить, что проводить различные действия со специальными бумагами УЦ можно и через саму программу Крипто Про – ее функционал достаточно обширен как для работы со специальными документами, так и для действий с ЭЛП.
Полезный материал: Электронная подпись заемщика.
Решение №2. подбор пин-кода и права администратора
На то, чтобы подобрать пин-код к токену, есть десять попыток. После десятого неверного ввода символов заблокируется.
Иногда количество попыток ввода можно увеличить. Для этого нужно зайти на токен в качестве администратора и разблокировать пин-код:
- Перейти в панель управления токеном. Например, если используется носитель «Рутокен», то нужно перейти в Пуск — Панель управления — Панель управления «Рутокен» — вкладка «Администрирование».
- Ввести пин-код администратора. Стандартное значение устанавливает производитель: для «Рутокена» — 87654321, для Jacarta SE — 00000000 для PKI-части и 1234567890 для ГОСТ части. Если стандартное значение администратора не подошло, значит его сменили, и нужно вспоминать установленную комбинацию. На это есть десять попыток, потом токен окончательно заблокируется.
- Разблокировать пин-код токена. Для этого на вкладке «Администрирование» нажать «Разблокировать».
Также, если пин-код администратора известен, то можно сбросить попытки ввода другим способом — через КриптоПро CSP:
- Открыть КриптоПро CSP, перейти на вкладку «Оборудование» и нажать кнопку «Настроить типы носителей».
- Выбрать свой токен. Открыть его свойства и перейти в раздел «Информация».
- Разблокировать пин-код.
После разблокировки счетчик попыток ввода сбросится. Но даже тогда, пока правильную комбинацию к токену не введут, доступ будет закрыт и использовать подпись не получится.
Если вспомнить или изменить нужную комбинацию не удалось, придется получать новый сертификат подписи в УЦ: отозвать старый сертификат и получить новый. Токен можно использовать старый — можете отформатировать носитель, тогда старый пин-код и сертификат удалятся.
При записи подписи на новый токен советуем поменять стандартный пин-код носителя на собственный. Это, конечно, может привести к тому, что комбинация вновь потеряется. Но лучше получить новый сертификат, чем пострадать от мошенников, которые смогли взломать «заводское» значение на токене и подписали украденной ЭП важные документы.
С помощью консоли управления
На клавиатуре наберите сочетание клавишWin R → в строку открыть введите «MMC» → Ok. Если на экран будет выведено окно контроля учетных записей нажмите кнопку «Да», тем самым дав разрешение на внесение изменений приложением.
После открытия консоли в меню Файл → выберите Добавить или удалить оснастку.
В открывшемся окне справа вы увидите список доступных оснасток. Выберите Сертификаты → нажмите кнопку Добавить.
Далее будет предложено выбрать какими сертификатами нужно управлять. Выберите «учетной записи компьютера» → Далее.
Если вы не являетесь администратором компьютера управление сертификатами можно будет осуществлять только для учетной записи пользователя под которой был выполнен вход в систему.
В следующем окне оставьте выбранным параметр «локальным компьютером» → нажмите кнопку Готово.
Вы вернетесь к окну Добавление и удаление оснасток, где в выбранных оснастках (слева) появятся Сертификаты (локальный компьютер) → нажмите Ok.
В Корне консоли разверните список каталогов. Все установленные сертификаты будут отсортированы по типам. Раскрыв нужный тип можно выполнить просмотр, экспорт, импорт или удаление сертификатов.
Состав: из чего состоит сертификат эп
Электронная подпись имеет вид буквенно-цифрового кода или графического изображения. В работе с сертификатами используется специализированное ПО, обеспечивающее шифрование информации. Чтобы получить подпись, будущий владелец должен предоставить о себе достоверные данные, подав документы в удостоверяющий центр.
Составляющие сертификата подписи:
Перед получением производится подробная проверка указанных данных. Только после подтверждения происходит выдача лицу электронного сертификата. Выполняются изготовление и передача носителя с ключом. Чтобы создать и подписать юридический документ, владельцу необходимо установить специализированное ПО.
На официальных порталах программ производителей выложен инструкции, как пользоваться ЭП в их программах (Microsoft Office, Acrobat Reader и других). Через установленное на ПК программное обеспечение наносится скрипт подписи. После нанесения ЭП документ не может быть изменен сторонними лицами.
Часть 1. самоподписанный сертификат
Для начала рассмотрим вариант самоподписанного сертификата корневого уровня.
Для упрощения задачи сгенерируем сертификат, который будет содержать только необходимые параметры:
Сделать это можно с помощью библиотеки Bouncy Castle, следующим образом:
private void button1_Click(object sender, EventArgs e)
{
var KeyGenerate = new RsaKeyPairGenerator();
KeyGenerate.Init(new KeyGenerationParameters(new SecureRandom(new CryptoApiRandomGenerator()), 1024));
AsymmetricCipherKeyPair kp = KeyGenerate.GenerateKeyPair();
var gen = new X509V3CertificateGenerator();
var certName = new X509Name("CN=CA");
var serialNo = new BigInteger("1",10);
gen.SetSerialNumber(serialNo);
gen.SetSubjectDN(certName);
gen.SetIssuerDN(certName);
gen.SetNotAfter(DateTime.Now.AddYears(100));
gen.SetNotBefore(DateTime.Now);
gen.SetSignatureAlgorithm("SHA1WITHRSA");
gen.SetPublicKey(kp.Public);
var myCert = gen.Generate(kp.Private);
byte[] result = DotNetUtilities.ToX509Certificate(myCert).Export(X509ContentType.Cert);
FileStream fs = new FileStream("D:test1.crt", FileMode.CreateNew);
fs.Write(result, 0, result.Length);
fs.Flush();
fs.Close();
}
В результате выполнения данной процедуры будет создан стандартный x.509 сертификат, который, будучи открытым с помощью hex-редактора, выглядит вот таким чудесным образом:
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
Тот же самый сертификат, но уже открытый с помощью стандартных средств windows:
Имя сертификата CA
Издатель CA
Версия сертификата 3
Серийный номер 0x1
Недействителен до... 15.09.2021 15:35:00 GMT
Недействителен после... 22.09.2113 15:35:00 GMT
Цифровая подпись (SHA-1) F9 AD 58 B5 50 3D F6 36 5E B8 89 D4 DC C8 5F CC 25 4B 93 A2
Цифровая подпись (SHA-256) 42 02 24 20 4E 8F 3A 3E 31 38 88 E5 C5 E7 C3 03 14 3A A6 52 EA 78 B9 77 42 5B 99 EB 4B BA 23 82
Открытый ключ(1024 битный) Алгоритм открытого ключа rsaEncryption
Модуль
00: 8D 80 B5 8E 80 8E 94 D1 04 03 6A 45 1A 54 5E 7E
10: EE 6D 0C CB 0B 82 03 F1 7D C9 6F ED 52 02 B2 08
20: C3 48 D1 24 70 C3 50 C2 1C 40 BC B5 9D F8 E8 A8
30: 41 16 7B 0B 34 1F 27 8D 32 2D 38 BA 18 A5 31 A9
40: E3 15 20 3D E4 0A DC D8 CD 42 B0 E3 66 53 85 21
50: 7C 90 13 E9 F9 C9 26 5A F3 FF 8C A8 92 25 CD 23
60: 08 69 F4 A2 F8 7B BF CD 45 E8 19 33 F1 AA E0 2B
70: 92 31 22 34 60 27 2E D7 56 04 8B 1B 59 64 77 5F
Экспонента 01 00 01
Подпись Алгоритм подписи sha1WithRSAEncryption
Подпись
00: 0A 1C ED 77 F4 79 D5 EC 73 51 32 25 09 61 F7 00
10: C4 64 74 29 86 5B 67 F2 3D A9 39 34 6B 3C A9 92
20: B8 BF 07 13 0B A0 9B DF 41 E2 8A F6 D3 17 53 E1
30: BA 7F C0 D0 BC 10 B7 9B 63 4F 06 D0 7B AC C6 FB
40: CE 95 F7 8A 72 AA 10 EA B0 D1 6D 74 69 5E 20 68
50: 5D 1A 66 28 C5 59 33 43 DB EE DA 00 80 99 5E DD
60: 17 AC 43 36 1E D0 5B 06 0F 8C 6C 82 D3 BB 3E 2B
70: A5 F1 94 FB 53 7B B0 54 22 6F F6 4C 18 1B 72 1C
Имея два этих файла, один с двоичными данными, а другой с описанием сертификата, попробуем разобраться что здесь к чему.
Прежде всего, нужно отметить, что файл *.crt хранит информацию о сертификате в закодированном виде. Для кодирования применяется особый язык, называемый ASN.1.
ASN.1 — стандарт записи, описывающий структуры данных для представления, кодирования, передачи и декодирования данных. Wikipedia
С помощью языка ASN.1 можно описывать сложные структуры, состоящие из данных различных типов. Типичный пример ASN.1-файла выглядит как-то так:
Однако ASN.1 разрабатывался в те светлые времена, когда «640 КБ должно было хватать каждому» и тратить место на такую громоздкую запись не было никакой возможности. Поэтому, в целях экономии места, а также более удобной обработки хранимой в ASN.1-форме информации, был разработан специальный метод кодирования — DER.
DER-кодировка описывается следующим правилом. Первым записывается байт, характеризующий тип данных, затем последовательность байтов хранящих сведения о длине данных и затем уже записываются сами данные.
К примеру, для кодировки целого числа INTEGER 65537 используется следующая форма: 0203 01 00 01.Здесь первый байт 02, определяет тип INTEGER (полную таблицу типов вы можете найти например тут), второй байт 03 показывает длину блока. А следующие за этим байты 01 00 01, являются шестнадцатеричной записью нашего числа 65537.
В нашем случае, для описание простейшего самоподписаного сертификата, достаточно 9 типов данных. Приведем таблицу кодирования для этих типов:
Зная как кодируется каждый из этих типов, мы можем попытаться распарсить наш *.crt файл.
3082 01 8F3081 F9A0030201 02 0201 01 30
0D0609 2A 86 48 86 F7 0D 01 01 05 0500300D
310B30090603 55 04 03 0C02 43 41 302017
0D 31 33 30 39 31 35 31 35 33 35 30 32 5A 180F
32 31 31 33 30 39 32 32 31 35 33 35 30 32 5A 30
0D310B30090603 55 04 03 0C02 43 41 3081
9F 300D0609 2A 86 48 86 F7 0D 01 01 01 0500
0381 8D 00 3081 890281 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 0203 01 00 01
300D0609 2A 86 48 86 F7 0D 01 01 05 050003
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
Преобразуя байты-идентификаторы типов и убирая байты описывающие длину блоков получим следующую структуру:
SEQUENCE(3 elem)
SEQUENCE(7 elem)
[0](1 elem)
INTEGER 2
INTEGER 1
SEQUENCE(2 elem)
OBJECT IDENTIFIER 1.2.840.113549.1.1.5
NULL
SEQUENCE(1 elem)
SET(1 elem)
SEQUENCE(2 elem)
OBJECT IDENTIFIER 2.5.4.3
UTF8String CA
SEQUENCE(2 elem)
UTCTime 13-09-15 15:35:02 UTC
GeneralizedTime 2113-09-22 15:35:02 UTC
SEQUENCE(1 elem)
SET(1 elem)
SEQUENCE(2 elem)
OBJECT IDENTIFIER 2.5.4.3
UTF8String CA
SEQUENCE(2 elem)
SEQUENCE(2 elem)
OBJECT IDENTIFIER 1.2.840.113549.1.1.1
NULL
BIT STRING(1 elem)
SEQUENCE(2 elem)
INTEGER 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
INTEGER 65537
SEQUENCE(2 elem)
OBJECT IDENTIFIER 1.2.840.113549.1.1.5
NULL
BIT STRING 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
Это уже более похоже на то, что мы видим при открытии сертификатов в браузере или Windows. Пробежимся по каждому элементу:
Важным моментом, о котором стоит особенно упомянуть являются данные, для которых вычисляется подпись. Интуитивно может показаться, что подписываются все данные идущие до последнего поля BIT STRING, содержащего подпись. Но на самом деле это не так. В стандарте x.
SEQUENCE(7 elem)
[0](1 elem)
INTEGER 2
INTEGER 1
SEQUENCE(2 elem)
OBJECT IDENTIFIER 1.2.840.113549.1.1.5
NULL
SEQUENCE(1 elem)
SET(1 elem)
SEQUENCE(2 elem)
OBJECT IDENTIFIER 2.5.4.3
UTF8String CA
SEQUENCE(2 elem)
UTCTime 13-09-15 15:35:02 UTC
GeneralizedTime 2113-09-22 15:35:02 UTC
SEQUENCE(1 elem)
SET(1 elem)
SEQUENCE(2 elem)
OBJECT IDENTIFIER 2.5.4.3
UTF8String CA
SEQUENCE(2 elem)
SEQUENCE(2 elem)
OBJECT IDENTIFIER 1.2.840.113549.1.1.1
NULL
BIT STRING(1 elem)
SEQUENCE(2 elem)
INTEGER 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
INTEGER 65537
Т.о. если перед вами будет стоять задача проверить ЭЦП x.509 сертификата, то для этого сперва необходимо извлечь TBS-сертификат.
Еще одно замечание относится к отпечатку сертификата. Как видите сам сертификат не содержит никаких сведений об отпечатке. Это объясняется тем, что отпечаток представляет собой обычное хеш-значение SHA-1 от всего файла сертификата, со всеми его полями, включая подпись издателя. Поэтому хранить отпечаток не обязательно, можно просто вычислять хеш при каждом просмотре сертификата.
Через «криптопро»
Алгоритм действий:
- нажать кнопку «Пуск»;
- в строке «Все программы» выбрать «КриптоПРО»;
- войти в раздел «Сертификаты».

