В случае, если закрытый ключ состоит из шести файлов .key: header.key, masks.key, masks2.key, name.key, primary.key, primary2.key, которые находятся в одной общей папке, перенесите папку с файлами на USB-накопитель (USB-флеш-накопитель, жёсткий диск) для отображения файлов в программе КриптоПро CSP.
Обратите внимание, файлы должны находиться в папке первого уровня (Рис. 1).
Затем проверьте отображение файлов в КриптоПро CSP. Для этого откройте программу, откройте раздел «Сервис» → «Просмотреть сертификаты в контейнере» (Рис. 2).
Далее нажмите кнопку «Обзор». Откроется окно выбора контейнера. При корректном отображении файлов будет строка: Считыватель – Наименование USB-накопителя, Имя контейнера – Наименование папки с файлами (Рис. 3).
Далее выполните установку личного сертификата по инструкции:
/ru-ru/support/kb/333#1.
Иногда для регистрации на каком-либо портале требуется загрузить файл сертификата в формате *.cerНо где найти этот файл мало кто знает.
Ваш сертификат находится в контейнере КриптоПро, который записан на USB-токен, флешку или в реестр.Чтобы его оттуда извлечь необходимо провести ряд несложных действий! Далее инструкция на примере КриптоПро 4.0.
Полученный данным способом сертификат содержит открытую информацию и может безопасно передаваться любому лицу (сайту, порталу)!
Данная инструкция отвечает на следующие вопросы:
- где найти сертификат эцп на компьютере
- где хранятся сертификаты криптопро на компьютере
- как сохранить сертификат эцп на компьютер криптопро
- как сохранить сертификат эцп на компьютер в формате cer
- как сохранить сертификат эцп на компьютер из реестра
- как отправить сертификат эцп по электронной почте
- как сохранить сертификат с рутокена на компьютер
- как сохранить открытый ключ эцп
- как сохранить открытый сертификат ключа
- как выгрузить сертификат эцп на рабочий стол
- как выгрузить сертификат из криптопро
- как выгрузить сертификат в формате cer
- как выгрузить сертификат с рутокена на компьютер
- как выгрузить сертификат эцп
Речь пойдет о файлах primary.key, masks.key и header.key, которые лежат в директории ххххх.000 на флешке. Данные файлы входят в состав криптоконтейнера закрытого ключа электронной подписи криптопровайдера КриптоПро, формат которого нигде не опубликован. Целью данной статьи является чтение контейнера и преобразование закрытого ключа в формат, который может быть прочитан в библиотеке OpenSSL. Долгое время было распространено ошибочное суждение, что достаточно сделать нечто вида (primary_key XOR masks_key) и мы получим закрытый ключ в чистом (raw) виде, однако забегая вперед, можно утверждать, что в КриптоПро было применено более сложное преобразование, в худшем случае состоящее из более чем 2000 (двух тысяч) операций хеширования.
Стоит упомянуть о существовании утилиты P12FromGostCSP которая позволяет конвертировать ключ в формат P12, доступный для работы с OpenSSL, но утилита имеет следующие существенные недостатки:
- Читает контейнер не напрямую, а через криптопровайдер, поэтому там, где кроме OpenSSL ничего нет, не работает.
- Если в свойствах ключа не отмечено, что ключ «экспортируемый», то конвертировать его невозможно.
- В демо версии не формирует файл с ключом, эта возможность присутствует только в платной версии.
Для этого необходимо проделать следующие действия:
• Выбрать меню «Пуск» / «Панель управления» / «КриптоПро CSP». Перейти на вкладку «Сервис» и нажать на кнопку «Просмотреть сертификаты в контейнере» (см. рис. 1).
Рис. 1. Окно «Свойства КриптоПро CSP».
• В открывшемся окне нажать на кнопку «Обзор», чтобы выбрать контейнер для просмотра. После выбора контейнера нажать на кнопку «Ок» (см. рис. 2).
Рис. 2. Окно выбора контейнера для просмотра.
• В следующем окне кликнуть по кнопке «Далее».
• В окне «Сертификат для установки» необходимо нажать кнопку «Свойства» (см. рис. 3).
Рис. 3. Окно просмотра сертификата
• В открывшемся файле сертификата следует перейти на вкладку «Состав» и нажать кнопку «Копировать в файл» (см. рис. 4).
Рис. 4. Вкладка «Состав».
• В открывшемся окне «Мастер экспорта сертификатов» нажать на кнопку «Далее». Затем отметить пункт «Нет, не экспортировать закрытый ключ» и выбрать «Далее» (см. рис. 5).
Рис. 5. Параметры экспорта закрытого ключа.
• В окне «Формат экспортируемого файла» выбрать «Файлы X.509 (.CER) в кодировке DER» и нажать на кнопку «Далее» (см. рис. 6).
Рис. 6. Формат экспортируемого файла.
• В следующем окне необходимо кликнуть по кнопке «Обзор», вручную указать имя (ФИО владельца сертификата) и каталог для сохранения файла. Затем нажать на кнопку «Сохранить» (см. рис. 7).
Рис. 7. Сохранение файла.
• В следующем окне нажать на кнопку «Далее», затем «Готово». Дождаться сообщения об успешном экспорте. Закрыть все окна программы КриптоПро.
Цифровой документооборот входит в нашу жизнь уверенными шагами и если для юридических лиц это уже суровые будни, то многие физические лица могли с этим еще не столкнуться. Но со временем оставаться в стороне становится всё сложнее и нужно приспосабливаться к меняющимся условиям, иначе можно получить не совсем приятные последствия.
Заключение договоров — дело привычное. Их заключают в банках, в больницах, при покупке мебели, оплате обучения. Прочитать договор, проверить реквизиты юридического лица, с которым заключается договор, убедиться в наличии печати и подписи — стандартная процедура, которая уменьшает риск обмана. Однако приобретённые навыки работы с бумажными договорами не могут просто так перейти в цифровой мир в силу специфики электронных документов.
В этой статье хочется рассказать о своем опыте знакомства с российскими электронными подписями (ЭП), которые используются для подписания договоров с физическими лицами в том числе и страховыми компаниями, а также подводных камнях, на которые наткнулся при этом.
Для меня эта история началась при заключении договора со страховой компанией ООО СК “Сбербанк страхование”. После оформления мне показались подозрительными некоторые факты (небольшой спойлер: всё оказалось хорошо) и я стал разбираться, как же мне проверить, что полученный документ действительно выдан страховой компанией, а не некими третьими лицами.
Что же меня насторожило?
После расчёта суммы в калькуляторе на сайте и заполнения формы с паспортными и контактными данными мне на электронную почту пришло письмо, в котором кроме общей информации, полезных ссылок и контактов было 3 вложения: памятка, правила страхования и сам полис. Я ознакомился с документами, оплатил страховку и стал ждать подписанную версию полиса.
Через полчаса ожидания я стал волноваться, быстрый поиск показал, что у страховой компании есть аж 3 разных активных домена: www.sberbank-insurance.ru, www.sberins.ru и sberbankins.ru, что не добавляло мне уверенности в компании.
Звонок в контакт центр принёс информацию о том, что присланный полис и является финальным документом с ЭП страховой компании. Мне показалось странным, что компания отдаёт уже подписанный документ еще до факта оплаты клиентом и я стал проверять полученный pdf файл.
- Экспорт закрытого ключа
- Импорт закрытого ключа
- Установка сертификата автоматически с выбором хранилища
- Установка сертификата вручную с выбором хранилища
- Установка сертификата через «Личный сертификат»
- Экспорт сертификата с закрытым ключом.
- В браузере Internet Explorer
- Экспорт открытого ключа сертификата
- Установка сертификата с закрытым ключом
- Установка через меню «Установить личный сертификат»
- Копирование с помощью КриптоПро CSP
- Установка через меню «Установить личный сертификат».
- Глава вторая
- Файл header. key
- Файл masks. key
- Глава первая
- Создание подписанного документа
- Правила использования материалов сайта ATI
- КриптоПро CSP
- Инструменты КриптоПро
- Читаем закрытый ключ и конвертируем
- Немного про корневые и промежуточные сертификаты
- Установка сертификатов
- Инструкция по копированию сертификата из контейнера КриптоПро
- 5 ответов
- Добавить комментарий
- Сборка утилиты конвертирования ключа
- Компиляция OpenSSL библиотеки
- Компиляция privkey
- Формирование файла закрытого ключа private. key
- Пользуемся закрытым ключом private. key для подписывания файла file. txt
- Проверяем подпись
- Экспорт сертификата электронной подписи
- Инструкция по созданию файла, подписанного ЭЦП, с использованием ПО КриптоПро
Экспорт закрытого ключа
Для экспорта закрытого ключа выполните следующие действия:
Откройте Крипто-Про CSP. Перейдите во вкладку «Сервис» и нажмите кнопку «Просмотреть сертификаты в контейнере» (Рис. 1).
В открывшемся окне укажите имя ключевого контейнера, нажав «Обзор» (Рис. 2).
Выберите ключевой контейнер пользователя, затем нажмите «Ок» (Рис. 3).
Нажмите «Далее» (Рис. 4).
Далее нажмите кнопку «Свойства» (Рис. 5).
В открывшемся окне перейдите во вкладку «Состав» и нажмите кнопку «Копировать в файл» (Рис. 6).
Откроется мастер экспорта сертификатов. Нажмите «Далее» (Рис. 7).
Далее отметьте «Да, экспортировать закрытый ключ» (1) и нажмите «Далее» (2) (Рис. 8).
Отметьте следующие пункты: «Файл обмена личной информацией – PKCS #12», «Включить по возможности все сертификаты в путь сертификации» и «Экспортировать все расширенные свойства» (1), затем нажмите кнопку «Далее» (2) (Рис. 9).
Укажите пароль и подтверждение пароля (1), затем нажмите кнопку «Далее» (2) (Рис. 10).
Далее укажите имя файла, используя «Обзор» (1), затем нажмите кнопку «Далее» (2) (Рис. 11).
Далее нажмите «Готово» (Рис. 12).
Система сообщит о чтении ключевой информации, нажмите кнопку «Ок» (Рис. 13).
Откроется окно с информацией об успешном экспорте. Нажмите «Ок» (Рис. 14).
Импорт закрытого ключа
Для установки закрытой части ключа откройте файл, сохранённый ранее (Рис. 15).
Откроется «Мастер импорта сертификатов», нажмите кнопку «Далее» (Рис. 16).
Укажите файл, который нужно импортировать, используя кнопку «Обзор», затем нажмите «Далее» (Рис. 17).
Далее введите пароль (1), отметьте пункт «Пометить этот ключ как экспортируемый, что позволит сохранять резервную копию ключа и перемещать его.» (2), затем нажмите кнопку «Далее» (Рис. 18).
Отметьте пункт «Поместить все сертификаты в следующее хранилище» (1), нажмите кнопку «Обзор» (2), в открывшемся окне отметьте «Личное» (3) и нажмите «Ок» (4). В окне мастера настроек нажмите «Далее» (5) (Рис. 19).
Нажмите «Готово» (Рис. 20).
В открывшемся окне КриптоПро CSP выберите носитель, на который будет импортирован ключ, затем нажмите «Ок» (Рис. 21).
Далее укажите новый пароль и его подтверждение (Рис. 22).
Система сообщит о чтении ключевой информации, нажмите кнопку «Ок» (Рис. 23).
Далее введите пароль (Рис. 24).
Далее нажмите «Ок» (Рис. 25).
Импорт успешно будет выполнен (Рис. 26).
Далее выполните установку личного сертификата по инструкции: /ru-ru/support/kb/333#1.
Для установки личного сертификата электронной подписи компании используйте один из способов:
- Установка сертификата автоматически с выбором хранилища
- Установка сертификата вручную с выбором хранилища
- Установка сертификата через «Личный сертификат»
Установка сертификата автоматически с выбором хранилища
1. Для того, чтобы установить личный сертификат, откройте «КриптоПро CSP» (Рис. 1).
2. В открывшейся программе перейдите во вкладку «Сервис», затем нажмите «Просмотреть сертификаты в контейнере» (Рис. 2).
3. В открывшемся окне нажмите кнопку «Обзор» (Рис. 3).
4. Выберите ключевой контейнер из списка и нажмите кнопку «Ок» (Рис. 4).
5. В окне «Сертификаты в контейнере закрытого ключа» нажмите кнопку «Далее» (Рис. 5).
6. Затем нажмите кнопку «Установить» (Рис. 6).
7. Сертификат установится в хранилище «Личные» текущего пользователя.
Установка сертификата вручную с выбором хранилища
Для установки личного сертификата (сертификата вашей организации) вручную выполните следующие действия.
На рабочем столе нажмите кнопку «Пуск», выберите «Панель управления», затем «КриптоПро CSP». В появившемся окне «КриптоПро CSP» перейдите на вкладку «Сервис» и нажмите кнопку «Посмотреть сертификаты в контейнере» (Рис. 7).
В открывшемся окне нажмите кнопку «Обзор» (Рис. 8).
Выберите нужный контейнер и нажмите кнопку «Ок» (Рис. 9).
В следующем окне кликните по кнопке «Далее» (Рис. 10).
Нажмите кнопку «Свойства» (Рис. 11).
В открывшемся окне нажмите кнопку «Установить сертификат» (Рис. 12).
Выберите расположение хранилища «Текущий пользователь» и нажмите «Далее» (Рис. 13).
Укажите расположение сертификата вручную, выбрав «Поместить все сертификаты в следующее хранилище» и нажмите кнопку «Обзор» для выбора хранилища сертификатов (Рис. 14).
Выберите «Личное» и нажмите «Ок» (Рис. 15).
Нажмите кнопку «Далее» (Рис. 16).
Нажмите кнопку «Готово» (Рис. 17).
Нажмите кнопку «Ок» (Рис. 18).
Установка сертификата через «Личный сертификат»
Для установки личного сертификата (сертификата вашей организации) через «Личный сертификат» выполните следующие действия.
На рабочем столе нажмите кнопку «Пуск», выберите «Панель управления», затем «КриптоПро CSP». В появившемся окне «КриптоПро CSP» перейдите на вкладку «Сервис» и нажмите кнопку «Установить личный сертификат» (Рис. 19).
В открывшемся окне нажмите кнопку «Обзор» (Рис. 20).
Выберите нужный сертификат и нажмите кнопку «Открыть» (Рис. 21).
В следующем окне нажмите кнопку «Далее» (Рис. 22).
Нажмите кнопку «Далее» (Рис. 23).
В открывшемся окне отметьте поле «Найти контейнер автоматически» (1) и нажмите кнопку «Далее» (2) (Рис. 24).
В окне «Хранилище сертификатов» нажмите кнопку «Далее» (Рис. 25).
Нажмите «Готово» (Рис. 26).
Отобразятся сообщения о чтении ключевой информации и произведении записи информации, нажмите «Ок» (Рис. 27, 28).
Если ранее сертифкат уже был в хранилище, то система предложит заменить его. Нажмите кнопку «Да» (Рис. 29).
Сертификат будет установлен.
Экспорт сертификата с закрытым ключом.
В браузере Internet Explorer
- Откройте Internet Explorer.
- Нажмите кнопку «Сервис» («шестерёнка» в правом верхнем углу окна).
- Выберите пункт «Свойства браузера».
- Зайдите на вкладку «Содержание» — кнопка «Сертификаты».
- В открывшемся окне на вкладке «Личные» находится Ваш сертификат.
- Откройте сертификат, который нужно скопировать, дважды щёлкнув на него правой клавишей мышки.
- На вкладке «Состав» нажмите «Копировать в файл».
- В «Мастере экспорта сертификатов» нажмите «Далее» и выберите пункт «Да, экспортировать закрытый ключ». Нажмите «Далее».
- На следующем этапе поставьте галочки у пунктов «Включить по возможности все сертификаты в путь сертификации» и «Экспортировать все расширенные свойства», остальные галочки необходимо убрать. Нажмите «Далее».
- Поставьте галочку и задайте пароль для экспортируемого файла. Данный пароль не рекомендуется сообщать по электронной почте. Нажмите «Далее».
- Укажите имя файла, выберите путь сохранения, с помощью кнопки «Обзор», укажите имя файла и нажмите «Сохранить», «Далее», затем нажмите «Готово».
Экспорт открытого ключа сертификата
- Для этого, повторив пункт 1-5, следует выделить нужный сертификат и нажать на кнопку «Экспорт».
- В окне «Мастер экспорта сертификатов» нажать на кнопку «Далее». Затем отметить пункт «Нет, не экспортировать закрытый ключ» и выбрать «Далее».
- В окне «Формат экспортируемого файла» выбрать «Файлы X.509 (.CER) в кодировке DER» и нажать на кнопку «Далее».
- В следующем окне необходимо кликнуть по кнопке «Обзор», указать имя и каталог для сохранения файла. Затем нажать на кнопку «Сохранить».
- В следующем окне нажать на кнопку «Далее», затем «Готово». Дождаться сообщения об успешном экспорте.
- Заархивируйте полученные файлы форматов .pfx и .cer.
Установка сертификата с закрытым ключом
- Откройте .pfx файл. Сразу запустится «Мастер импорта сертификатов».
- Укажите хранилище «Текущий пользователь» и нажмите «Далее», затем снова «Далее».
- Введите пароль, который указывали при экспорте (пункт 10) и поставьте галочку на пункте «Пометить этот ключ как экспортируемый…», иначе контейнер нельзя будет скопировать в дальнейшем. Нажмите «Далее».
- Выберите пункт «Поместить все сертификаты в следующее хранилище», нажмите на кнопку «Обзор», выберите «Личное» и нажмите на кнопку «ОК». Нажмите «Далее», а затем «Готово».
- В окне КриптоПро выберите носитель, на который хотите сохранить контейнер. При необходимости задайте пароль.
- Для корректной работы сертификата со встроенной лицензией переустановите сертификат в контейнер.
Установка через меню «Установить личный сертификат»
- Для установки сертификата этим способом Вам понадобится файл сертификата (файл с расширением.cer).
- В меню Пуск выберите пункт «КРИПТО-ПРО», запустите приложение «КриптоПро CSP».
- Перейдите на вкладку «Сервис» и нажмите кнопку «Установить личный сертификат»:
- В следующем окне нажмите кнопку Обзор, чтобы выбрать файл сертификата. Укажите путь к файлу сертификата и нажмите кнопку Открыть (в нашем примере файл сертификата находится на Рабочем столе):
- В следующем окне нажмите кнопку «Далее»; в окне Сертификат для установки нажмите «Далее».
- Поставьте галку в окне «Найти контейнер автоматически» (в нашем примере контейнер находится в Реестре компьютера) и нажмите «Далее»:
- В следующем окне отметьте пункт «Установить сертификат (цепочку сертификатов) в контейнер» и нажмите «Далее»:
- В окне Завершение мастера установки личного сертификата нажмите «Готово».
- Если КриптоПро CSP запрашивает pin-код от контейнера, введите нужный код или попробуйте стандартные pin-коды носителей:
Rutoken – 12345678
eToken /JaCarta – 1234567890
- Если откроется сообщение «Этот сертификат уже присутствует в хранилище сертификатов. Заменить существующий сертификат новым, с проставленной ссылкой на закрытый ключ?», нажмите «Да»:
- Сертификат установлен. Можно закрыть все открытые окна КриптоПро.
Остались вопросы?
Отдел технической поддержки
тел.: 8 (800) 333-91-03, доб. 2400
email: [email protected]
Если для работы используется дискета или flash-накопитель, копирование можно выполнить средствами Windows (этот способ подходит для версий КриптоПро CSP не ниже 3.0). Папку с закрытым ключом (и файл сертификата — открытый ключ, если он есть) необходимо поместить в корень дискеты (flash-накопителя). Название папки при копировании рекомендуется не изменять. Папка с закрытым ключом должна содержать 6 файлов с расширением .key.
Пример закрытого ключа — папки с шестью файлами, и открытого ключа — файла с расширением .cer.
Копирование контейнера также можно выполнить с помощью КриптоПро CSP. Для этого необходимо выполнить следующие шаги:Как правило, в закрытом ключе присутствует открытый ключ (файл header.key в этом случае будет весить больше 1 Кб). В этом случае копирование открытого ключа выполнять не обязательно.
Копирование с помощью КриптоПро CSP
1. Выбрать Пуск / Панель Управления / КриптоПро CSP.
2. Перейти на вкладку Сервис и кликнуть по кнопке Скопировать контейнер.
3. В окне «Копирование контейнера закрытого ключа» нажмите на кнопку «Обзор».
4. Выберите контейнер, который необходимо скопировать, и кликните по кнопке «Ок», затем «Далее».
5. Если вы копируете с защищённого ключевого носителя, то появится окно ввода, в котором следует указать pin-код.
6. Если вы не меняли pin-код на носителе, стандартный pin-код необходимо вводить соответственно его типу:
Rutoken – стандартный pin-код 12345678eToken /JaCarta – 1234567890
7. В следующем окне необходимо ввести имя Вашей копии. Придумайте и укажите вручную имя для нового контейнера. В названии контейнера допускается русская раскладка и пробелы. Затем кликните «Готово».
8. В окне «Выбор ключевого носителя» выберите носитель, на который будет помещен новый контейнер.
9. На новый контейнер будет предложено установить пароль. Рекомендуем установить такой пароль, чтобы вам было легко его запомнить, но посторонние не могли его угадать или подобрать. Если вы не хотите устанавливать пароль, можно оставить поле пустым и нажать «ОК».
В случае утери пароля/pin-кода использование контейнера станет невозможным.
10. Если вы копируете контейнер на смарт-карту ruToken/eToken /JaCarta, окно запроса будет выглядеть так:
11. В окне ввода укажите pin-код. Если вы не меняли pin-код на носителе, стандартный pin-код
Rutoken – 12345678eToken /JaCarta – 1234567890
12. После копирования система вернется на вкладку «Сервис» КриптоПро CSP. Копирование завершено.
13. Для работы с копией ключевого контейнера необходимо установить личный сертификат.
14. В меню Пуск выберите пункт «КРИПТО-ПРО», запустите приложение «КриптоПро CSP»
15. Перейдите на вкладку «Сервис» и нажмите кнопку «Просмотреть сертификаты в контейнере»:
16. В следующем окне нажмите кнопку Обзор, чтобы выбрать контейнер для просмотра (в нашем примере контейнер находится в Реестре):
17. После выбора контейнера нажмите кнопку Ок, затем Далее
18. Если после нажатия на кнопку Далее Вы видите такое сообщение:
19. «В контейнере закрытого ключа отсутствует открытый ключ шифрования», следует установить сертификат по рекомендациям, описанным в разделе «Установка через меню «Установить личный сертификат».
20. В окне Сертификат для просмотра нажмите кнопку Установить:
21. Если откроется сообщение «Этот сертификат уже присутствует в хранилище сертификатов. Заменить существующий сертификат новым, с проставленной ссылкой на закрытый ключ?», нажмите Да:
22. Дождитесь сообщения об успешной установке:
23. Сертификат установлен. Можно закрыть все открытые окна КриптоПро.
Установка через меню «Установить личный сертификат».
1. Для установки сертификата этим способом Вам понадобится файл сертификата (файл с расширением.cer).
2. В меню Пуск выберите пункт «КРИПТО-ПРО», запустите приложение «КриптоПро CSP»
3. Перейдите на вкладку «Сервис» и нажмите кнопку «Установить личный сертификат»:
4. В следующем окне нажмите кнопку Обзор, чтобы выбрать файл сертификата. Укажите путь к файлу сертификата и нажмите кнопку Открыть (в нашем примере файл сертификата находится на Рабочем столе):
5. В следующем окне нажмите кнопку Далее; в окне Сертификат для установки нажмите Далее.
6. Поставьте галку в окне Найти контейнер автоматически (в нашем примере контейнер находится в Реестре компьютера) и нажмите Далее:
7. В следующем окне отметьте пункт Установить сертификат (цепочку сертификатов) в контейнер и нажмите Далее:
8. В окне Завершение мастера установки личного сертификата нажмите Готово.
9. Если КриптоПро CSP запрашивает pin-код от контейнера, введите нужный код или попробуйте стандартные pin-коды носителей:
Rutoken – 12345678eToken /JaCarta – 1234567890
10. Если откроется сообщение «Этот сертификат уже присутствует в хранилище сертификатов. Заменить существующий сертификат новым, с проставленной ссылкой на закрытый ключ?», нажмите Да:
11. Сертификат установлен. Можно закрыть все открытые окна КриптоПро.
Остались вопросы?
Отдел технической поддержки
тел.: 8 (800) 333-91-03, доб. 2400
email: [email protected]
Глава вторая
Порывшись в почте, я нашел еще один электронный договор. По счастливой случайности, им тоже оказался страховой полис, но на этот раз еОСАГО от АО “Тинькофф Страхование”. Открываем сертификат, смотрим выпустившую сертификат организацию. Ей оказывается АО “Тинькофф банк”. Да, оказывается у них есть свой УЦ, который выдает сертификаты дочерним организациям (у Сбербанка тоже есть свой УЦ, но в дочерних структурах он не используется).
По отработанному алгоритму идём в поисковую систему с запросом “тинькофф сертификат”, находим официальный сайт УЦ АО Тинькофф Банк. Тут нас встречает изобилие ссылок на корневые сертификаты, списки отозванных сертификатов и даже видеоинструкция по их установке. Скачиваем “Цепочка корневых сертификатов УЦ АО Тинькофф Банк ГОСТ Р 34.10.2012”, на этот раз ссылка ведёт не на сторонний сервис, а на сайт банка. Формат файла P7B не очень известный, но открывается Windows без установки стороннего софта и показывает находящиеся в нём сертификаты. Здесь уже привычный корневой сертификат от Минкомсвязи (другой, не тот, что в первом случае) и промежуточный сертификат УЦ банка.
Ставим оба, проверяем сертификат в полисе. Но нет, сертификат не является доверенным, т.к. система не может подтвердить поставщика сертификата. На сайте УЦ было 2 ссылки на 2 цепочки сертификатов, один для ГОСТ Р 34.10.2001, другой для ГОСТ Р 34.10.2012. Полис был выпущен в этом году, логичнее бы его подписать уже более современным криптоалгоритмом (тем более уже есть версия ГОСТ от 2018 года, алгоритмы обновляются довольно часто), но давайте проверим старый.
В новом файле формата P7B оказывается уже 3 файла сертификатов. Можно поставить все 3, однако стоит заметить, что сертификат “Головного удостоверяющего центра” мы поставили в первой главе из RAR архива ООО “ИТК”, они идентичны. А сертификат с не очень говорящим названием “УЦ 1 ИС ГУЦ” поставил КриптоПро CSP, т.к. галочка об установке корневых сертификатов была установлена по-умолчанию в его инсталляторе. Единственным новым является сертификат АО “Тинькофф Банк”, который мы и ставим.
После установки сертификатов из “Цепочка корневых сертификатов УЦ АО Тинькофф Банк ГОСТ Р 34.10.2001” путь в сертификате прорисовался и система радостно сообщила, что он является доверенным. Adobe Acrobat Reader DC также подтвердил, что подпись действительна.
На этом приключения с проверкой ЭП на полисе еОСАГО завершаются. Заметно, что после того, как в системе уже установлен необходимый софт, а пользователь понимает принципы работы и поиска промежуточных сертификатов, то проверка подписи занимает уже меньше времени.
Но проблемные места по-прежнему видны: необходимо искать в интернете официальные сайты удостоверяющих центров, разбираться в инструкциях по установке сертификатов. Даже при установленных корневых сертификатах необходимо искать промежуточный, иначе цепочка доверия будет не полной и система не сможет подтвердить достоверность подписи.
Файл header. key
Из этого файла нам потребуется параметры электронной подписи CryptoProParamSet (подчеркнуто красным).
- GostR3410_2001_CryptoPro_A_ParamSet — 1.2.643.2.2.35.1
- GostR3410_2001_CryptoPro_B_ParamSet — 1.2.643.2.2.35.2
- GostR3410_2001_CryptoPro_C_ParamSet — 1.2.643.2.2.35.3
- GostR3410_2001_CryptoPro_XchA_ParamSet — 1.2.643.2.2.36.0
- GostR3410_2001_CryptoPro_XchB_ParamSet — 1.2.643.2.2.36.1
А также первые 8 байт открытого ключа (подчеркнуто) для контроля правильности чтения закрытого.
Файл masks. key
Содержит 32 байта маски ключа в формате Asn1, зашифрованного на ключе хранения pwd_key. Далее 12 байт «затравочной» информации для генерации ключа хранения pwd_key, если криптоконтейнер защищен паролем, то пароль также участвует в генерации ключа хранения.
Далее контрольная сумма (имитозащита) 4 байта. Контрольной информацией для простоты мы пользоваться не будем, общий контроль будет осуществляться путем генерации открытого ключа и сравнения первых 8 байт полученного ключа с соответствующим полем из файла header.key:
Глава первая
Все манипуляции с PDF документом приведены в чистой версии ОС Windows 10, русская домашняя редакция, как наиболее вероятной среде работы простого пользователя. Набор софта, используемый в статье, также является непрофессиональным и доступным для всех.
Для начала я открыл документ в просмотрщике Foxit Reader, который использую как основной:
Это выглядит очень и очень подозрительно — документ модифицирован непонятно кем, сертификат также не является доверенным. Система не может проверить цепочку доверия для данного сертификата и помечает его недействительным.
Кроме имени организации, которой выдан сертификат, видно наименование выдавшей его организации, ООО “ИТК”. Поиск по запросу “ООО ИТК сертификат” вывел меня на страницу Установка корневого сертификата Удостоверяющего центра ООО «ИТК». Это официальный сайт ООО «Интернет Технологии и Коммуникации», который является одним из удостоверяющих центров, выдающих сертификаты ЭП.
Следуем инструкции: нам нужно пройти по ссылке и скачать с Google Drive (!) RAR архив (!!) «Корневой квалифицированный.rar» (который ещё надо найти чем открыть, пришлось ставить 7-zip) и видим там 2 сертификата: корневой и промежуточный. Корневой выдан Минкомсвязи самим себе, а промежуточный — министерством для ООО “ИТК”. Устанавливаем их, соглашаемся с добавлением корневого сертификата (краем глаза замечая, что sha1 отпечаток устанавливаемого ключа и картинки в инструкции совпадает, но про такое сравнение в пунктах установки ничего нет).
Снова открываем сертификат из документа. И чуда не произошло, цепочка доверия от корневого до конечного не строится!
Изучаем ЭП подробнее: в Foxit Reader есть дополнительная информация о свойствах подписи:
Ага, алгоритм хеширования ГОСТовский, ЭП создана в КриптоПро PDF. Возможно, Windows не знает про ГОСТ шифрование и поэтому ему нужен дополнительный криптопровайдер.
Идём на сайт КриптоПро, регистрируемся, скачиваем пробную версию КриптоПро CSP 5.0 на 3 месяца. Что будет дальше — не совсем понятно, возможно всё превратится в тыкву, посмотрим.
Снова открываем просмотр сертификата ЭП:
Выглядит уже лучше. Видно, что система считает сертификат действительным, построена цепочка от корневого сертификата через промежуточный.
Сообщение о проверке немного улучшилось, но всё равно Foxit Reader не может проверить сертификат (вероятно дело в ГОСТовском алгоритме):
В Adobe Acrobat Reader DC проверка тоже не успешна:
И на этом вроде бы можно остановиться: Foxit Reader подтверждает, что документ не был изменен после подписания, руками можно проверить, что сертификат подтверждается системой и действителен. Но всё же хочется довести дело до конца, чтобы хотя бы одна программа сказала: да, документ действителен, всё хорошо.
Вспоминаем, что полис подписан в программе КриптоПро PDF. Вероятно, что раз она может создавать такие подписи, то уж наверняка должна их и проверять. Ставим.
+1 триал версия на 90 дней, хотя вроде бы надпись при установке успокаивает, что при использовании продукта в Adobe Acrobat Reader DC лицензия не нужна.
Ура, долгожданное сообщение о том, что всё хорошо.
Подведем промежуточный итог. Для проверки действительности ЭП на документе нужно:
- Узнать, какой удостоверяющий центр выдал сертификат, которым подписан документ, установить его промежуточный и, если такого еще нет, корневой сертификат (в нашем случае из rar архива с Google Drive);
- Установить в систему криптопровайдер (вероятно, существуют другие криптопровайдеры, которые обучат Windows ГОСТовским криптоалгоритмам) КриптоПро CSP с триалом на 3 месяца и неизвестностью после;
- Для проверки подписи из Adobe Acrobat Reader DC установить КриптоПро PDF (без CSP он не ставится).
Вот такой алгоритм вырисовывается из поверхностного анализа темы за вечер. Проблема проверки цифровой подписи была решена, но видно трудности, которые могут возникнуть у рядового пользователя:
- Нужно как-то найти и скачать корневой и промежуточный сертификаты. Непонятно, откуда его можно скачать официально, а поиск в сети может привести к установке левых сертификатов, через которые мошенники могут атаковать незадачливого пользователя;
- Нужно понять, какого софта не хватает в системе и где его взять, из коробки ничего не работает. В данной статье приведены примеры на основе продуктов КриптоПро только потому, что это название встретилось в информации о создании ЭП. Нужно изучать тему в поиске аналогов;
- Проверка полноценно заработала только в Adobe Acrobat Reader DC, в Foxit Reader проверка ЭП неполная, нет долгожданной зелёной галочки. Нужно копать дальше, вероятно есть решения.
Создание подписанного документа
Подписать можно абсолютно любой файл.
Перейдите в пункт “Создание подписи”
Нажмите на кнопку “Выбрать файл для подписи” и выберите файл, который нужно подписать.
Выберите подпись, которой необходимо подписать документ. Обратите внимание – ЭЦП должно быть актуальной.
После выбора ЭЦП станет активной кнопка “Подписать”. Необходимо её нажать. Если документ подписан и нет ошибок – под кнопкой “подписать появится соответствующая надпись. Либо будет указана ошибка с кодом.
Далее перейдите в папку, где хранился подписываемый документ, в нем будет два файла – сам документ и его подпись. Размещать или пересылать необходимо оба документа.
Правила использования материалов сайта ATI
Все права на любые материалы, опубликованные на сайте ATI.SU, защищены в соответствии с российским и международным законодательством об авторском праве и смежных правах. Вся информация, размещенная на данном веб-сайте, предназначена только для персонального использования. Запрещается ее воспроизведение, копирование и/или распространение в какой-либо форме, а также автоматизированное извлечение ее любыми сервисами без официального разрешения Админиcтрации сайта.
КриптоПро CSP
Для подписи электронных документов, будем использовать программное обеспечение КриптоПро CSP.
Использование иных криптографических программ под административную ответственность руководителей и лиц, использующих ПО СКЗИ, не имеющих действующего сертификата соответствия ФСБ РФ.
Инструменты КриптоПро
Для работы с ЭЦП запустите утилиту “Инструменты КриптоПро”. В ней собраны все необходимые инструменты для работы с ЭЦП
Для работы можно использовать ЭЦП, выданную Казначейством района Для этого необходимо скачать и установить корневой сертификат Федерального казначейства РФ по ссылке. Так как это корневой сертификат, то и установить его необходимо в хранилище корневых сертификатов.
Читаем закрытый ключ и конвертируем
Файл privkey.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <openssl/pem.h>
#include <openssl/cms.h>
#include <openssl/err.h>
#include "gost_lcl.h"
/* Convert little-endian byte array into bignum */
BIGNUM *reverse32bn(char *b, BN_CTX *ctx)
{
BIGNUM *res;
char buf[32];
BUF_reverse(buf, b, 32);
res = BN_bin2bn(buf, 32, BN_CTX_get(ctx));
OPENSSL_cleanse(buf, sizeof(buf));
return res;
}
void xor_material(char *buf36, char *buf5C, char *src)
{
int i;
for(i = 0; i < 32; i++)
{
buf36[i] = src[i] ^ 0x36;
buf5C[i] = src[i] ^ 0x5C;
}
}
int make_pwd_key(char *result_key, char *start12, int start12_len, char *passw)
{
int result;
int i;
char pincode4[1024];
int pin_len;
char current[32];
char material36[32];
char material5C[32];
char hash_result[32];
gost_hash_ctx ctx;
init_gost_hash_ctx(&ctx, &GostR3411_94_CryptoProParamSet);
memset(pincode4, 0, sizeof(pincode4));
pin_len = strlen(passw);
if (pin_len*4 > sizeof(pincode4)) { result = 1; goto err; }
for(i = 0; i < pin_len; i++)
pincode4[i*4] = passw[i];
start_hash(&ctx);
hash_block(&ctx, start12, start12_len);
if (pin_len)
hash_block(&ctx, pincode4, pin_len * 4);
finish_hash(&ctx, hash_result);
memcpy(current, (char*)"DENEFH028.760246785.IUEFHWUIO.EF", 32);
for(i = 0; i < (pin_len?2000:2); i++)
{
xor_material(material36, material5C, current);
start_hash(&ctx);
hash_block(&ctx, material36, 32);
hash_block(&ctx, hash_result, 32);
hash_block(&ctx, material5C, 32);
hash_block(&ctx, hash_result, 32);
finish_hash(&ctx, current);
}
xor_material(material36, material5C, current);
start_hash(&ctx);
hash_block(&ctx, material36, 32);
hash_block(&ctx, start12, start12_len);
hash_block(&ctx, material5C, 32);
if (pin_len)
hash_block(&ctx, pincode4, pin_len * 4);
finish_hash(&ctx, current);
start_hash(&ctx);
hash_block(&ctx, current, 32);
finish_hash(&ctx, result_key);
result = 0; //ok
err:
return result;
}
BIGNUM *decode_primary_key(char *pwd_key, char *primary_key, BN_CTX *bn_ctx)
{
BIGNUM *res;
char buf[32];
gost_ctx ctx;
gost_init(&ctx, gost_cipher_list->sblock);
gost_key(&ctx, pwd_key);
gost_dec(&ctx, primary_key, buf, 4);
res = reverse32bn(buf, bn_ctx);
OPENSSL_cleanse(buf, sizeof(buf));
return res;
}
BIGNUM *remove_mask_and_check_public(char *oid_param_set8, BIGNUM *key_with_mask, BIGNUM *mask, char *public8, BN_CTX *ctx)
{
int result;
EC_KEY *eckey = NULL;
const EC_POINT *pubkey;
const EC_GROUP *group;
BIGNUM *X, *Y, *order, *raw_secret, *mask_inv;
char outbuf[32], public_X[32];
ASN1_OBJECT *obj;
int nid;
order = BN_CTX_get(ctx);
mask_inv = BN_CTX_get(ctx);
raw_secret = BN_CTX_get(ctx);
X = BN_CTX_get(ctx);
Y = BN_CTX_get(ctx);
if (!order || !mask_inv || !raw_secret || !X || !Y) { result = 1; goto err; }
obj = ASN1_OBJECT_create(0, oid_param_set8+1, *oid_param_set8, NULL, NULL);
nid = OBJ_obj2nid(obj);
ASN1_OBJECT_free(obj);
if (!(eckey = EC_KEY_new())) { result = 1; goto err; }
if (!fill_GOST2001_params(eckey, nid)) { result = 1; goto err; }
if (!(group = EC_KEY_get0_group(eckey))) { result = 1; goto err; }
if (!EC_GROUP_get_order(group, order, ctx)) { result = 1; goto err; }
if (!BN_mod_inverse(mask_inv, mask, order, ctx)) { result = 1; goto err; }
if (!BN_mod_mul(raw_secret, key_with_mask, mask_inv, order, ctx)) { result = 1; goto err; }
if (!EC_KEY_set_private_key(eckey, raw_secret)) { result = 1; goto err; }
if (!gost2001_compute_public(eckey)) { result = 1; goto err; }
if (!(pubkey = EC_KEY_get0_public_key(eckey))) { result = 1; goto err; }
if (!EC_POINT_get_affine_coordinates_GFp(group, pubkey, X, Y, ctx)) { result = 1; goto err; }
store_bignum(X, outbuf, sizeof(outbuf));
BUF_reverse(public_X, outbuf, sizeof(outbuf));
if (memcmp(public_X, public8, 8) != 0) { result = 1; goto err; }
result = 0; //ok
err:
if (eckey) EC_KEY_free(eckey);
if (result == 0) return raw_secret;
return NULL;
}
int file_length(char *fname)
{
int len;
FILE *f = fopen(fname, "rb");
if (f == NULL) return -1;
fseek(f, 0, SEEK_END);
len = ftell(f);
fclose(f);
return len;
}
int read_file(char *fname, int start_pos, char *buf, int len)
{
int read_len;
FILE *f = fopen(fname, "rb");
if (f == NULL) return 1;
if (start_pos) fseek(f, start_pos, SEEK_SET);
read_len = fread(buf, 1, len, f);
fclose(f);
if (read_len != len) return 1;
return 0; //ok
}
int get_asn1_len(unsigned char *buf, int *size_hdr)
{
int n, i, res;
int pos = 0;
if ((buf[pos]&0x80) == 0) {
*size_hdr = 1;
return buf[pos];
}
n = buf[pos++]&0x7f;
res = 0;
for(i = 0; i < n; i++) {
res = res*256 + buf[pos++];
}
*size_hdr = n+1;
return res;
}
#define MAX_HEADER 20000
int read_container(char *fpath, int flag2, char *salt12, char *primary_key, char *masks_key, char *public8, char *oid_param_set8)
{
int result;
char primary_path[1024+30];
char masks_path[1024+30];
char header_path[1024+30];
char header_buf[MAX_HEADER];
int header_len;
int i, len, pos, size_hdr;
if (strlen(fpath)>1024) { result = 1; goto err; }
sprintf(header_path, "%s/header.key", fpath);
if (flag2 == 0)
{
sprintf(primary_path, "%s/primary.key", fpath);
sprintf(masks_path, "%s/masks.key", fpath);
}
else
{
sprintf(primary_path, "%s/primary2.key", fpath);
sprintf(masks_path, "%s/masks2.key", fpath);
}
if (read_file(primary_path, 4, primary_key, 32)) { result = 1; goto err; }
if (read_file(masks_path, 4, masks_key, 32)) { result = 1; goto err; }
if (read_file(masks_path, 0x26, salt12, 12)) { result = 1; goto err; }
header_len = file_length(header_path);
if (header_len < 0x42 || header_len > MAX_HEADER) { result = 1; goto err; }
if (read_file(header_path, 0, header_buf, header_len)) { result = 1; goto err; }
//------------- skip certificate ---------------------------
pos = 0;
for(i = 0; i < 2; i++)
{
get_asn1_len(header_buf+pos+1, &size_hdr);
pos += size_hdr+1;
if (pos > header_len-8) { result = 2; goto err; }
}
//------------------ get oid_param_set8 -----------------------
#define PARAM_SET_POS 34
if (memcmp(header_buf+pos+PARAM_SET_POS, "\x6\x7", 2) != 0) { result = 2; goto err; }
memcpy(oid_param_set8, header_buf+pos+PARAM_SET_POS+1, 8);
//------------------ get public8 -----------------------
result = 2; //not found
pos += 52;
for(i = 0; i < 3; i++)
{
len = get_asn1_len(header_buf+pos+1, &size_hdr);
if (len == 8 && memcmp(header_buf+pos, "\x8a\x8", 2) == 0)
{
memcpy(public8,header_buf+pos+2,8);
result = 0; //ok
break;
}
pos += len+size_hdr+1;
if (pos > header_len-8) { result = 2; goto err; }
}
err:
OPENSSL_cleanse(header_buf, sizeof(header_buf));
return result;
}
#define START_OID 0x12
#define START_KEY 0x28
unsigned char asn1_private_key[72] = {
0x30,0x46,2,1,0,0x30,0x1c,6,6,0x2a,0x85,3,2,2,0x13,0x30,0x12,6,7,0x11,
0x11,0x11,0x11,0x11,0x11,0x11,6,7,0x2a,0x85,3,2,2,0x1e,1,4,0x23,2,0x21,0
};
int main(int argc, char **argv)
{
int result;
char *container_path;
char *passw;
char salt12[12];
char primary_key[32];
char masks_key[32];
char public8[8];
char oid_param_set8[8];
BN_CTX *ctx;
BIGNUM *key_with_mask;
BIGNUM *mask;
BIGNUM *raw_key;
char pwd_key[32];
char outbuf[32];
ctx = BN_CTX_new();
if (argc == 2)
{
container_path = argv[1];
passw = "";
}
else
if (argc == 3)
{
container_path = argv[1];
passw = argv[2];
}
else
{
printf("get_private container_path [passw]\n");
result = 1;
goto err;
}
if (read_container(container_path, 0, salt12, primary_key, masks_key, public8, oid_param_set8) != 0 &&
read_container(container_path, 1, salt12, primary_key, masks_key, public8, oid_param_set8) != 0)
{
printf("can not read container from %s\n", container_path);
result = 2;
goto err;
}
make_pwd_key(pwd_key, salt12, 12, passw);
key_with_mask = decode_primary_key(pwd_key, primary_key, ctx);
OPENSSL_cleanse(pwd_key, sizeof(pwd_key));
mask = reverse32bn(masks_key, ctx);
raw_key = remove_mask_and_check_public(oid_param_set8, key_with_mask, mask, public8, ctx);
if (raw_key)
{
BIO *bio;
store_bignum(raw_key, outbuf, sizeof(outbuf));
memcpy(asn1_private_key+START_OID, oid_param_set8, 8);
memcpy(asn1_private_key+START_KEY, outbuf, 32);
//bio = BIO_new_file("private.key", "w");
bio = BIO_new_fp(stdout, BIO_NOCLOSE | BIO_FP_TEXT);
PEM_write_bio(bio, "PRIVATE KEY", "", asn1_private_key, sizeof(asn1_private_key));
BIO_free(bio);
OPENSSL_cleanse(outbuf, sizeof(outbuf));
OPENSSL_cleanse(asn1_private_key, sizeof(asn1_private_key));
result = 0; //ok
}
else
{
printf("Error check public key\n");
result = 3;
}
err:
BN_CTX_free(ctx);
OPENSSL_cleanse(salt12, sizeof(salt12));
OPENSSL_cleanse(primary_key, sizeof(primary_key));
OPENSSL_cleanse(masks_key, sizeof(masks_key));
return result;
}
Небольшой комментарий.
Основную работу выполняют следующие 3 функции:
1. Создаем ключ хранения исходя из 12-ти байтовой «соли» и пароля.
make_pwd_key(pwd_key, salt12, 12, passw);
2. Расшифровываем основной ключ на ключе хранения.
key_with_mask = decode_primary_key(pwd_key, primary_key, ctx);
3. Делим ключ с маской на маску.
raw_key = remove_mask_and_check_public(oid_param_set8, key_with_mask, mask, public8, ctx);
Но так как в библиотеке OpenSLL операция деления по модулю традиционно отсутствует, пользуемся операцией взятия обратного числа и умножением.
if (!BN_mod_inverse(mask_inv, mask, order, ctx)) { result = 1; goto err; }
if (!BN_mod_mul(raw_secret, key_with_mask, mask_inv, order, ctx)) { result = 1; goto err; }
Немного про корневые и промежуточные сертификаты
Проделав всю эту работу, меня не покидало чувство, что вся система построена не очень безопасно, требует от пользователя кучу дополнительных операций и доверия многим факторам: от поисковой системы, которая может не выдать первой строкой официальный сайт УЦ, до работы самого персонала УЦ, который выкладывает сертификаты без контрольных сумм на сторонние веб сервисы в проприетарных форматах контейнеров.
За дополнительной информацией я пошёл на сайт Минкомсвязи и нашёл такую страницу. Там можно скачать XLS файл, в котором будут перечислены все имеющие в настоящий момент аккредитацию УЦ, а также УЦ с приостановленной и прекращенной аккредитацией. В списке аккредитованных находится 494 УЦ, что немало.
Однако просто списка недостаточно, нужны хотя бы ссылки на сайты этих УЦ, а также надо найти корневые сертификаты непосредственно от первоисточника, Минкомсвязи. Следующий точкой в поиске этой информации стал портал pravo.gov.ru, где перечислены ссылки на некоторые корневые сертификаты. Страница доступна только по http протоколу, контрольных сумм опять нет.
Приглядевшись, можно заметить, что первые 4 ссылки ведут на портал https://e-trust.gosuslugi.ru. Не совсем понятно, почему именно поддомен сайта госуслуг стал центральным в системе корневых сертификатов, но, кажется, тут приведена вся актуальная информация по корневым и промежуточным сертификатам.
На странице головного УЦ https://e-trust.gosuslugi.ru/MainCA приведены 10 корневых сертификатов от Минкомсвязи, для разных ГОСТ алгоритмов и с разными сроками действия. Тут же доступны слепки ключей, можно проверить, что скачанный сертификат никто не подменил. Сам сайт имеет сертификат от Thawte.
На странице аккредитованных УЦ https://e-trust.gosuslugi.ru/CA находится полный список промежуточных удостоверяющих центров, можно скачать их сертификаты, проверить слепок. Кроме этого вся информация доступна в формате XML. Одним разом можно получить файл с данными о всех промежуточных УЦ, а также их сертификаты и ссылки для получения списка отозванных сертификатов.
У сертификатов есть поле точки распространения списка отзывов (CRL), в котором прописан путь получения списка отозванных сертификатов. При проверке ЭП на каком-то документе кроме установки промежуточного и корневых сертификатов нужно также установить и последний список отозванных и обновлять его перед каждой проверкой (данная процедура автоматизируется специализированным софтом, но штатные средства вроде бы так не умеют). На портале e-trust у каждого сертификата указан путь к такому списку и он может отличаться от того, что написано в самом сертификате. Чему верить? Не совсем понятно.
В заключение статьи хочется отметить, что проверка ЭП на электронных документах по силам каждому, однако это не совсем тривиальный процесс, требующий некоторых знаний. Возможно, что в будущем этот процесс упростится. Кроме этого остается открытым вопрос проверки ЭП на мобильных устройствах, а ведь они сейчас стали основным инструментом пользователей, давно опередив персональные компьютеры.
После написания статьи осталось несколько открытых вопросов, которые хотелось бы обсудить с сообществом:
- аналоги КриптоПро, особенно opensource инструменты для создания и проверки ЭП;
- добавление валидации ЭП не только в Adobe Acrobat Reader DC, но и в Foxit Reader и другие;
- оставшиеся за пределами данной статьи проблемы, которые также важны и требуют внимания, но не проявились в моём случае.
UPD 0: В комментариях подсказали онлайн сервис на портале госуслуг для проверки ЭП документов: https://www.gosuslugi.ru/pgu/eds. К сожалению, не заработало в моём случае, но может быть полезно.
UPD 1: После написания статьи мне подсказали, что есть ещё один криптопровайдер, ViPNet CSP, который тоже может помочь с ГОСТовскими криптоалгоритмами в системе. Одновременная установка его с КриптоПро CSP под вопросом.
КДПВ: edar, Pixabay
Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Всегда-ли вы проверяете ЭЦП в полученных электронных документах?
Проголосовали 70 пользователей.
Воздержались 28 пользователей.
Установка сертификатов
Используя Инструменты КриптоПро, перейдите в пункт меню “Сертификаты” и установите сертификат Федерального казначейства в “доверенные корневые центры сертификации”.
Затем повторите процедуру для ЭЦП сотрудника, выбрав место установки сертификата “Личное”. Подготовка завершена.
Инструкция по копированию сертификата из контейнера КриптоПро
1. Запустить программу КриптоПро CSP
Найти её можно в меню «Пуск» или в Панели управления
2. Во вкладке «Сервис» нажать «Посмотреть сертификаты в контейнере…»
3. С помощью кнопки «Обзор» выбрать нужный контейнер
Если в списке вы не видите свой контейнер, убедитесь что носитель с ЭЦП подключен к компьютеру и драйвер на USB-токен установлен.
На Рутокене должен гореть светодиод. Если он не горит, значит драйвер не установлен. Скачать его можно со страницы по настройке рабочего места
4. После выбора контейнера откроются данные из сертификата электронной подписи.
Убедитесь что это именно тот сертификат, который вам нужен!
Затем нажимаем «Свойства», откроется сертификат ЭЦП
Остаётся только сохранить этот сертификат на компьютер. Нажимаем «Состав» и «Копировать в файл…»
5. Открывается «Мастер экспорта сертификатов»
Ни в коем случае не экспортировать закрытый ключ, иначе тот кому вы отправите ваш сертификат сможет использовать вашу ЭЦП по своему усмотрению!
Выберите формат экспортируемого файла в соответствии с требованиями портала. В большинстве подойдут настройки по умолчанию, т.е. «Файлы X.509 (.CER) в кодировке DER»
Далее укажите путь и имя сохраняемого сертификата
Нажмите «Готово» и ваш сертификат сохранится в указанном каталоге!
Полученный таким образом файл сертификата (.cer) можно без опасения передавать третьим лицам, т.к. он содержит только открытые сведения (открытый ключ).
Экспорт сертификата из контейнера КриптоПро CSP обновлено: 11 июля, 2022 автором: ЭЦП SHOP
Сборка утилиты конвертирования ключа
Далее сборка исходников описана для Linux версии.
Версию для Windows можно скачать отсюда там же есть сертификаты и закрытый ключ для тестирования, для сборки потребуется бесплатный компилятор Borland C++ 5.5
Компиляция OpenSSL библиотеки
После скачивания и распаковки исходных текстов openssl в целевой директории выполняем команды:
./config
make
Получаем готовую библиотеку libcrypto.a в текущей директории.
Также потребуются заголовочные файлы из директорий engines/ccgost и include.
Компиляция privkey
gcc -o privkey -Iengines/ccgost -Iinclude privkey.c libcrypto.a -pthread -ldl
Формирование файла закрытого ключа private. key
./privkey /mnt/usbflash/lp-9a0fe.000
Тестовый закрытый ключ в криптоконтейнере lp-9a0fe.000, сертификат открытого ключа signer.cer и другие файлы для тестирования можно взять отсюда
Получаем результат работы:
-----BEGIN PRIVATE KEY-----
MEYCAQAwHAYGKoUDAgITMBIGByqFAwICJAAGByqFAwICHgEEIwIhAKzsrv/l1Uwk
uzph/LQN9mux0Jz0yaW21kOYEFv0Xyut
-----END PRIVATE KEY-----
Cохраняем в private.key
Пользуемся закрытым ключом private. key для подписывания файла file. txt
openssl cms -sign -inkey private.key -in file.txt -CAfile CA.cer -signer signer.cer -engine gost -out test.sign -outform DER -noattr -binary
Проверяем подпись
openssl cms -verify -content file.txt -in test.sign -CAfile CA.cer -signer signer.cer -engine gost -inform DER -noattr -binary
Все работает просто замечательно!
Спасибо за внимание. Это была моя первая статья на хабре.
Экспорт сертификата электронной подписи
Экспорт сертификата электронной подписи позволяет выгрузить сертификат в файл для его дальнейшего использования: загрузить на платформу для подписания, проверить его подлинность через сайт государственных услуг.
Для экспорта сертификата используйте один из способов:
Способ 1. Экспорт из приложения «Сертификаты». Для этого выполните следующие действия:
1. Откройте программу «Сертификаты» (Рис. 1, 2).
2. В окне «Сертификат» откройте вкладку «Состав» и нажмите кнопку «Копировать в файл» (Рис. 3).
3. В открывшемся окне нажмите кнопку «Далее» (Рис. 4).
4. Выберите пункт «Нет, не экспортировать закрытый ключ» и нажмите кнопку «Далее» (Рис. 5).
5. Выберите формат экспортируемого файла «Файлы Х.509 (.CER) в кодировке DER» и нажмите кнопку «Далее» (Рис. 6).
6. Выберите локальное месторасположение сертификата и введите имя файла для сохранения сертификата. Затем нажмите кнопку «Сохранить» (Рис. 7).
7. В строке Имя файла отобразится путь, куда будет сохранён сертификат. Нажмите кнопку «Далее» (Рис. 8).
8. Нажмите кнопку «Готово» (Рис. 9).
9. Далее нажмите кнопку «Ок» (Рис. 10).
10. В папке, которую вы указали в п. 6, появится значок экспортированного сертификата (Рис. 11).
Способ 2. Экспорт сертификата из КриптоПро. Для этого выполните следующие действия:
1. Откройте Крипто-Про CSP.
2. Перейдите во вкладку «Сервис» и нажмите кнопку «Просмотреть сертификаты в контейнере» (Рис. 12).
3. В открывшемся окне укажите имя ключевого контейнера, нажав «Обзор» или «По сертификату» (Рис. 13).
4. Нажав «По сертификату», откроется окно безопасности. Нажмите «Ок» (Рис. 14).
5. Нажмите «Далее» (Рис. 15).
6. Далее нажмите кнопку «Свойства» (Рис. 16).
7. В открывшемся окне перейдите во вкладку «Состав» и нажмите кнопку «Копировать в файл» (Рис. 17).
8. Откроется мастер экспорта сертификатов. Нажмите «Далее» (Рис. 18).
9. Далее отметьте «Нет» (1) и нажмите «Далее» (2) (Рис. 19).
10. Система автоматически отметит нужную кодировку (1), нажмите кнопку «Далее» (2) (Рис. 20).
11. Укажите имя файла, который хотите экспортировать (1) и нажмите «Далее» (2) (Рис. 21).
12. Далее нажмите «Готово» (Рис. 22).
13. Система сообщит об успешном экспорте. Нажмите «Ок» (Рис. 23).
Инструкция по созданию файла, подписанного ЭЦП, с использованием ПО КриптоПро
Для собственного использования создал инструкцию для подведов. Буду рад, если кому-нибудь пригодится в работе. Ниже представлен текст с картинками из инструкции по созданию подписанного ЭЦП электронного документа, с использованием ПО КриптоПро. В самом конце приложена ссылка на исходник, он выполнен в виде Гугл документа, шаблон – брошюра, формат листа А4. Его можно использовать по своему усмотрению.
5 ответов
Как сделать аналогичную операцию на MacOS
Спасибо, большое. Месяц мучилась, не могла скопировать ключ для регистрации в налоговой
Не могу найти на компьютере сертификат, чтобы заргеитсрирвоать его на сайте фнс и сдать отчетность
Отклонила декларацию налоговая, думаю, потому что ключ менялся у меня
Сертификат лучше искать не на компьютере, а в контейнере с ключами электронной подписи (по данной инструкции), так вы точно будете знать что зарегистрировали именно актуальный сертификат.