Где хранятся сертификаты ЭЦП на компьютере: хранение

Где хранятся сертификаты ЭЦП на компьютере: хранение Электронная цифровая подпись
Содержание
  1. Что такое пароль и пин-код электронной подписи
  2. О сертификате: что это такое
  3. В операционной системе windows xp
  4. В реестре
  5. В системе linux
  6. Где в реестре хранится эцп
  7. Для чего нужен сертификат
  8. Другие варианты
  9. Забыл пин-код токена
  10. Зачем копировать сертификаты эцп
  11. Извлечение сертификата из контейнера
  12. Использование портала госуслуги
  13. Как восстановить пароль электронной подписи
  14. Как выполнить проверку
  15. Как посмотреть
  16. Как привязать сертификат к контейнеру
  17. Как проверить срок окончания сертификата подписи?
  18. Контроль достоверности плагинами
  19. Места хранения эцп
  20. Открытый и закрытый ключ
  21. Пароль от контейнера электронной подписи
  22. Пин-код от токена электронной подписи
  23. Применение онлайн-сервисов для проверки эцп
  24. Причины возникновения ошибок
  25. Просмотр сертификатов через certmgr
  26. Просмотр сертификатов через консоль управления
  27. Просмотр сертификатов через криптопро
  28. Решение №1. заводской пароль.
  29. Решение №2. подбор пин-кода и права администратора
  30. Состав: из чего состоит сертификат эп
  31. Способы копирования эцп
  32. Удостоверяющие центры: какие уц могут выдавать усиленные сертификаты
  33. Файлы сертификатов в проводнике
  34. Часть 1. самоподписанный сертификат
  35. Часть 2. сертификат 2-го уровня
  36. Заключение

Что такое пароль и пин-код электронной подписи

На электронную подпись устанавливают один из типов защиты: пароль или пин-код. Разберемся, чем они отличаются. 

О сертификате: что это такое

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

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

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

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

Информация о сертификатах хранится в базах Единого реестра ЕСИА. Вносить данные имеют право удостоверяющие центры, прошедшие сертификацию. Все УЦ делятся на аккредитованные и неаккредитованные.

В операционной системе 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.

Наименования контейнеров задаются в формате, воспринимаемом бинарными программами, составляющими дистрибутив CSP.

На жестком диске размещено хранилище HDImageStore, куда заносятся закрытые ключи. Доступ к ним открыт и для JCP.

Для хранения сертификатов в ОС Linux создается специальная директория. Путь к ним открывается вручную вводом особых команд.

Где в реестре хранится эцп

Иногда реестр используется как ключевой носитель, т.е. он подходит для импорта и экспорта сертификатов. Где находится сертификат ЭЦП зависит от битности системы:

Для чего нужен сертификат

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

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

Другие варианты

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

Единственная сертифицированная в Минкомсвязи программа для работы с электронными подписями – это именно КриптоПРО CSP (на текущий момент актуальны версии 3.5 или старше). Её использование – это своего рода гарантия защиты от возможной компрометации ЭЦП.

Итого, где находится сертификат электронной подписи на компьютере? В системной папке пользователя, а удобней всего с ключами работать при помощи программы КриптоПРО CSP. С её помощью можно совершить быстрый перенос электронной подписи с одного компьютера на другой даже без использования USB-рутокена. А для быстрого просмотра самих ключей или удаления некоторых из них удобней всего использовать Internet Explorer.

Забыл пин-код токена

Восстановить забытый пин-код токена тоже невозможно. Именно из-за этого токен — надежный носитель ЭП: если его украдут мошенники, то пин-код защитит подпись от них. 

Однако для владельца ЭП есть два способа, которые помогут подобрать нужную комбинацию.

Зачем копировать сертификаты эцп

Перенос ключей и сертификатов электронной подписи необходим в нескольких случаях. Первый из них — работа с ЭЦП сразу на нескольких ПК. Переставлять флешку с ключом не всегда удобно, поэтому пользователи предпочитают иметь копию на рабочем столе. Вторая причина для создания резервной копии — возможность потери или порчи USB-носителя.

Извлечение сертификата из контейнера

Как извлечь сертификат из контейнера закрытого ключа:

  • Запустить КриптоПро CSP.
  • Перейти во вкладку «Сервис».
  • Нажать «Посмотреть сертификаты в контейнере».
  • В новом окне будет список контейнеров закрытого ключа, из которого выбирают нужный, и нажимают «ОК».
  • При необходимости ввести pin-код и нажать «ОК».
  • В открывшемся окне необходимо нажать кнопку «Свойства».
  • Перейти на вкладку «Состав» и нажать кнопку «Копировать».
  • В новом окне нажимают «Далее» и выбирают пункт «Не экспортировать закрытый ключ».
  • В следующем рабочем окне выбирают первый пункт кодировки.
  • Затем нажимают «Обзор», выбирают путь сохранения сертификата и указывают имя файла, нажимают «Сохранить».

Для завершения процесса нужно нажать на кнопку «Далее», затем «Готово».

Использование портала госуслуги

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

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

Как восстановить пароль электронной подписи

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

Как выполнить проверку

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

Как посмотреть

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

Как привязать сертификат к контейнеру

Для привязки сертификата ключа электронной подписи к контейнеру нужно:

  • Через «Панель управления» перейти к КриптоПро и выбрать «Свойства»/«Сервис»/«Установить личный сертификат».
  • В мастере установки через «Обзор» выбрать сертификат.
  • Затем в мастере установки нажать «Далее».
  • Выбрать ключевой контейнер, к которому будет привязан сертификат.
  • При необходимости сертификат можно поместить в личное хранилище или любое другое место на ПК.

На этом привязка сертификата к контейнеру завершена.

Как проверить срок окончания сертификата подписи?

Узнать срок окончания ЭП можно двумя способами:

1й способ: В программе «КриптоПро CSP» открыть вкладку Сервис, нажать кнопку <Посмотреть сертификаты в контейнере>, затем <Обзор>, выбрать нужный сертификат. Кнопка Далее> — в строчке «Действителен по» будет дата и время окончания данного сертификата (рис.1).

2й способ: В браузере Internet Explorer: Сервис -> Свойства обозревателя -> Содержание -> Сертификаты в закладке «Личные» (рис.2). Выберите из списка нужный сертификат, в подробной информации о нем можно увидеть срок действия (рис.3).

Читайте также:  Росприроднадзор | Разъяснение по работе с веб-порталом приёма отчетности

Контроль достоверности плагинами

Для контроля достоверности ЭЦП компания КриптоПро предлагает два плагина. Один бесплатный и служит для проверки PDF-файлов, а второй платный и предназначен для контроля юридической правомочности документов в форматах офисного ПО Word, Excel. Проверка в последнем случае требует дополнительного наличия программы КриптоПро CSP. После открытия документа необходимо выполнить следующие действия:

Если проверка будет пройдена успешно, то появится сообщение с указанием данных о сертификате и его владельце. Иначе появится информация о недействительности ЭЦП.

Для контроля достоверности подписи в PDF-файле также необходим криптопровайдер КриптоПРО CSP. Для выполнения операции выполните следующие действия:

Если проверка пройдет успешно, то появится окно с указанием владельца сертификата.

Места хранения эцп

Допускается использовать ЭЦП одновременно на нескольких устройствах. Предварительно нужно узнать, где на персональном компьютере хранится файл сертификата.

Открытый и закрытый ключ

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

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

Пароль от контейнера электронной подписи

Пароль используют для подписи, сохраненной в память компьютера. Он защищает контейнер ЭП — папку с файлами подписи: сертификатом, закрытым и открытым ключами. 

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

Далее этот пароль будет запрашиваться при установке подписи на компьютер, ее копировании и при каждом использовании — подписании документов, работе на электронной торговой площадке или входе в сервисы. Если, конечно, не установить галочку «Запомнить пароль».

Пин-код от токена электронной подписи

Пин-код используется для электронной подписи, которая записана на носитель в виде usb-флешки — на токен. Пин защищает токен, поэтому, если мошенники украдут носитель ЭП, то самой подписью они воспользоваться не смогут.

Впервые владелец ЭП должен ввести пин-код при выпуске подписи — когда ее записывают на токен. Если носитель новый, то нужно ввести «заводское» стандартное значение, например, 12345678 для Рутокена. «Заводское» значение лучше сразу изменить на собственное, чтобы его не смогли подобрать злоумышленники.

После этого пин-код понадобится вводить, чтобы установить сертификат подписи на компьютер, использовать и копировать ЭП, работать с ней за новым компьютером. Чтобы не вводить комбинацию каждый раз, можно нажать галочку «Запомнить пароль». Главное в таком случае самим не забыть последовательность символов.

Применение онлайн-сервисов для проверки эцп

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

Для выполнения операции выполните следующие действия:

Результат появится на отдельной странице, и будет выглядеть вот так:

Причины возникновения ошибок

При контроле достоверности могут возникнуть ошибки в ЭЦП. Чаще всего они связаны со следующими причинами:

  • отправитель подкорректировал содержание документа после простановки ЭЦП (здесь подпись автоматически становится недействительной, и необходимо ее повторное проставление);
  • Проверить работоспособность ЭЦП можно с КриптоПРО CSP. Для этого зайдите в приложение и выполните следующие действия:

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

    Если у вас еще нет электронной подписи, Удостоверяющий Центр «Астрал-М» предлагает широкий выбор тарифных планов ЭЦП. У нас можно купить электронную подпись для решения любых рабочих задач, наши специалисты помогут вам выбрать подпись, отвечающую вашим потребностям. Чтобы её приобрести, заполните форму обратной связи.

    Просмотр сертификатов через certmgr

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

    Где на компьютере найти сертификат цифровой подписи при помощи менеджера? Для этого необходимо:

    • открыть меню «Пуск»;
    • ввести команду «certmgr.msc» (без кавычек) и нажать клавишу «Enter»;
    • в левой части появившегося окна будут вкладки «Личное» и «Корневые сертификаты удостоверяющего центра» — вот там и можно найти все необходимые ключи.

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

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

    Просмотр сертификатов через консоль управления

    Это ещё один встроенный в Windows инструмент, позволяющий на компьютере найти ключ ЭЦП.

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

    • запустить командную строку (нажать комбинацию клавиш Win R, ввести «cmd» и нажать клавишу Enter);
    • ввести в терминале команду mmc и нажать Enter;
    • кликнуть на «Файл» и выбрать «Добавить или удалить оснастку»;
    • выбрать «Добавить», затем «Добавить изолированную оснастку»;
    • выбрать «Сертификаты».

    Затем также можно выбрать просмотр сертификатов по определенной учетной записи, зарегистрированной в Windows. Чтобы таким методом найти ЭЦП на компьютере также нужно обладать правами администратора.

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

    Просмотр сертификатов через криптопро

    Как найти сертификат ЭЦП на компьютере через КриптоПРО (программа-дистрибутив, который используется для работы с электронными подписями)? Для этого необходимо:

    • открыть меню «Пуск»;
    • перейти на вкладку «Все программы», далее – «КриптоПРО»;
    • кликнуть на «Сертификаты».

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

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

    Можно редактировать список сертификатов и непосредственно из программы КриптоПРО (запустить можно из «Панели управления»). Там доступен более широкий функционал для работы с ЭЦП, а также сертификатами удостоверяющих центров.

    Решение №1. заводской пароль.

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

    • «Рутокен», eSmart, JaCarta и JaCarta LT— 12345678,
    • eToken — 1234567890, eToken,
    • Jacarta SE — 1111111 для PKI-части и 0987654321 для ГОСТ части.

    Если «заводская» комбинация к токену не подходит, значит ее сменили при записи сертификата. Тогда вернуть доступ к ЭП можно только одним способом — подобрать правильные символы.

    Решение №2. подбор пин-кода и права администратора

    На то, чтобы подобрать пин-код к токену, есть десять попыток. После десятого неверного ввода символов заблокируется.

    Иногда количество попыток ввода можно увеличить. Для этого нужно зайти на токен в качестве администратора и разблокировать пин-код:

    1. Перейти в панель управления токеном. Например, если используется носитель «Рутокен», то нужно перейти в Пуск — Панель управления — Панель управления «Рутокен» — вкладка «Администрирование».
    2. Ввести пин-код администратора. Стандартное значение устанавливает производитель: для «Рутокена» — 87654321, для Jacarta SE — 00000000 для PKI-части и 1234567890 для ГОСТ части. Если стандартное значение администратора не подошло, значит его сменили, и нужно вспоминать установленную комбинацию. На это есть десять попыток, потом токен окончательно заблокируется.
    3. Разблокировать пин-код токена. Для этого на вкладке «Администрирование» нажать «Разблокировать».

    Также, если пин-код администратора известен, то можно сбросить попытки ввода другим способом — через КриптоПро CSP:

    1. Открыть КриптоПро CSP, перейти на вкладку «Оборудование» и нажать кнопку «Настроить типы носителей».
    2. Выбрать свой токен. Открыть его свойства и перейти в раздел «Информация».
    3. Разблокировать пин-код.

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

    Если вспомнить или изменить нужную комбинацию не удалось, придется получать новый сертификат подписи в УЦ: отозвать старый сертификат и получить новый. Токен можно использовать старый — можете отформатировать носитель, тогда старый пин-код и сертификат удалятся.

    При записи подписи на новый токен советуем поменять стандартный пин-код носителя на собственный. Это, конечно, может привести к тому, что комбинация вновь потеряется. Но лучше получить новый сертификат, чем пострадать от мошенников, которые смогли взломать «заводское» значение на токене и подписали украденной ЭП важные документы.

    Состав: из чего состоит сертификат эп

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

    Читайте также:  Почему в Эльбе не работает электронная подпись

    Составляющие сертификата подписи:

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

    На официальных порталах программ производителей выложен инструкции, как пользоваться ЭП в их программах (Microsoft Office, Acrobat Reader и других). Через установленное на ПК программное обеспечение наносится скрипт подписи. После нанесения ЭП документ не может быть изменен сторонними лицами.

    Способы копирования эцп

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

    Удостоверяющие центры: какие уц могут выдавать усиленные сертификаты

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

    Файлы сертификатов в проводнике

    А вот закрытый сертификат ЭЦП не копируется на жесткий диск – он хранится исключительно на защищенном USB-рутокене и используется как раз для генерации открытых ключей (при этом нужно ещё вводить секретный пароль, который предоставляет удостоверяющий центр).

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

    Где ещё на компьютере хранится сертификат электронной подписи? Ещё одна копия, для программного использования, хранится в шифрованном виде в папке Windows, но получить доступ туда или даже скопировать сам файл сертификата не получится – операционная система не предоставит таких прав доступа.

    Ещё следует учесть, что для просмотра файлов сертификатов пользователь должен обладать правами администратора. Если же он вошел в систему как «Гость», то к системным папкам на диске С (или другом, где установлена сама система) он не сможет получить доступ.

    Сам файл сертификата имеет расширение .cer или .csr (в зависимости от кодировки), занимает буквально несколько килобайт памяти. Точно такие же файлы используются в дистрибутивах Linux, в MacOS – это уже стандартизированный формат электронных подписей.

    Часть 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.

    Читайте также:  Энциклопедия решений. Подведение итогов электронного аукциона по Закону N 44-ФЗ (по 31 декабря 2021 года)

    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 от всего файла сертификата, со всеми его полями, включая подпись издателя. Поэтому хранить отпечаток не обязательно, можно просто вычислять хеш при каждом просмотре сертификата.

    Часть 2. сертификат 2-го уровня

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

    Заключение

    Тех усидчивых людей, которые продрались сквозь все эти ASN.1 выражения и шестнадцатеричные наборы данных, я хотел бы поблагодарить за прочтение. Надеюсь вам было хоть немного интересно. И стало чуточку понятнее, что же такое на самом деле X.509 сертификат.

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

    1. RFC5280 — спецификация x.509 сертификата и списка отзывов сертификатов.
    2. Руководство по выживанию — SSL/TLS и сертификаты X.509
    3. ASN.1 простыми словами, вариант статьи для хабра
    4. on-line утилита для декодирования DER-файлов
    5. Первичный стандарт ITU-T X.509 ( русский перевод). Спасибо ystr за ссылку.
    Оцените статью
    ЭЦП Эксперт
    Добавить комментарий