криптопро протестировать ключ

Трудности валидации на сайте «РТС-Тендер» возникают из-за того, что ЭЦП browser Plug-In не видит ключ RuToken или только сертификат на подпись. Узнать, почему ПК не видит ключ электронной подписи, помогут инструкция от поставщика специализированного ПО, тематический форум на сайте ФНС или ресурсах, посвящённых ЭЦП, а также специалисты из службы технической поддержки производителя крипто-ПО.

Наличие лицензии КриптоПро CSP встроенной в сертификат электронной подписи даёт возможность использовать данный сертификат на любом компьютере независимо от наличия лицензии КриптоПро CSP на рабочее место.

Внимание!!! При отсутствии лицензии на рабочее место в программе КриптоПро CSP будет отображено что лицензия Истекла или «демонстрационная»! Это нормально! В программе отображается состояние именно лицензии на рабочее место. Сертификат со встроенной лицензией будет работать независимо от лицензии на рабочее место!

Браузер Chrome (Chromium Gost, Chromium Edge): запустите браузер и дождитесь оповещения об установленном расширении «CryptoPro Extension for CAdES Browser Plug-in». Включите это расширение.

криптопро протестировать ключ

Если на Вашем компьютере ранее уже выполнялась установка расширения CryptoPro Extension for CAdES Browser Plug-in, а потом оно был удалено, его потребуется установить отдельно. Для этого перейдите по ссылке и установите расширение из интернет-магазина Chrome.

Браузер Opera или Яндекс.Браузер: расширение доступно по ссылке.

криптопро протестировать ключ

Браузер Firefox: скачайте расширение по ссылке и установите в браузер самостоятельно.

криптопро протестировать ключ

Браузер Microsoft Internet Explorer: не требуется дополнительных настроек.

Для того чтобы протестировать контейнер закрытого ключа КриптоПро CSP.

Нужно осуществить несколько простых действий.

1. Нажимаем кнопку ПУСК — пишем КриптоПро

Как протестировать контейнер закрытого ключа КриптоПро CSP

2. Открываем приложение КриптоПро CSP и переходим на вкладку СЕРВИС .

Как протестировать контейнер закрытого ключа КриптоПро CSP

3. Находим кнопку ПРОТЕСТИРОВАТЬ . В Разделе «Контейнер закрытого ключа» (Эти мастера позволяют протестировать, скопировать или удалить контейнер закрытого ключа и носителя).

Как протестировать контейнер закрытого ключа КриптоПро CSP

Как протестировать контейнер закрытого ключа КриптоПро CSP

5. Выбираем нужный нам ключ (если их несколько) и нажимаем «ОК»

Как протестировать контейнер закрытого ключа КриптоПро CSP

Как протестировать контейнер закрытого ключа КриптоПро CSP

7. Происходит тестирование контейнера закрытого ключа. Статус тестирования можно посмотреть в открывшимся окне. Если тестирование прошло успешно то будет стоять статус «успешно»

Как протестировать контейнер закрытого ключа КриптоПро CSP

Пишем статью

Содержание
  1. Способы, с помощью которых публикация уникальных статей в Интернете принесет вам славу
  2. Минуточку внимания
  3. Ключевые носители Рутокен и поддерживаемые ими режимы работы
  4. Немного про корневые и промежуточные сертификаты
  5. Как проверить наличие встроенной лицензии КриптоПро в сертификат электронной подписи?
  6. Работаете в 1С?
  7. Комментарии пользователей
  8. Названия режимов работы
  9. Глава первая
  10. Сложный случай
  11. Проверка лицензии КриптоПро CSP встроенной в сертификат ЭП
  12. 1 способ. Проверка через КриптоПро PKI
  13. 2 способ. Проверка через Состав сертификата
  14. Файл masks. key
  15. Читаем закрытый ключ и конвертируем
  16. Глава вторая
  17. Как должно работать
  18. Сборка утилиты конвертирования ключа
  19. Компиляция OpenSSL библиотеки
  20. Компиляция privkey
  21. Формирование файла закрытого ключа private. key
  22. Пользуемся закрытым ключом private. key для подписывания файла file. txt
  23. Проверяем подпись
  24. Использование Активного режима
  25. Настройка КриптоПРО для работы с 1С-ЭДО в Linux
  26. Загрузка КриптоПро CSP для Linux (на примере ОС Ubuntu).
  27. Установка КриптоПро CSP для Linux.
  28. Произвести настройки программы для работы с электронной подписью в 1С.
  29. Работа с сертификатами на Linux с использованием КриптоПро.
  30. Выполните настройку электронного документооборота согласно видеоинструкции. Типичные ошибки и способы их устранения.
  31. Не ставится ключ/сертификат
  32. Почему «КриптоПро» CSP может не видеть ключей на Рутокен? Следует проверить такие параметры:
  33. При установке желательно делать так:
  34. установить личный сертификат, следуя мастеру установки
  35. указать через «Обзор» расположение файла сертификата с расширением. cer
  36. выбрать контейнер закрытого ключа (через «Обзор» выбрать сертификат на считывателе — флешке/дискете)
  37. Файл header. key
  38. Компьютер не видит сертификат ЭЦП
  39. Использования ФКН режима

Способы, с помощью которых публикация уникальных статей в Интернете принесет вам славу

  1. Убедитесь что ваша электронная подпись отображается в программе КриптоПро CSP, подробнее по ссылке.
  2. Для работы с электронной подписью в различных сервисах и ИС посредством браузера, необходимо установить КриптоПро ЭЦП Browser plug-in.
  3. После установки Плагина, его необходимо активировать в Вашем браузере. Ниже приведен пример активации плагина КриптоПро ЭЦП Browser plug-in в самых распространенных браузерах:
  • Google Chrome
  • Яндекс.Браузер
  • Microsoft Edge
  • Mozilla Firefox
  • Opera
  • Спутник

    4. Теперь на примере браузера Google Chrome протестируем вашу КЭП:

Для этого нажмите на значок мозаики в вашем браузере и выберете плагин КриптоПро ЭЦП Browser plug-in, далее нажмите «Проверить работу плагина«

криптопро протестировать ключ

В новом окне необходимо нажать «Да«

криптопро протестировать ключ

Выберите вашу подпись:

криптопро протестировать ключ

В информации о сертификате сказано что подпись имеет статут «Действителен» и никаких ошибок нет

Чуть ниже нажмите кнопку «Подписать» и увидите набор символов который говорит о том что ваша подпись работает корректно.

криптопро протестировать ключ

Остались вопросы? Как мы можем помочь?

Речь пойдет о файлах primary.key, masks.key и header.key, которые лежат в директории ххххх.000 на флешке. Данные файлы входят в состав криптоконтейнера закрытого ключа электронной подписи криптопровайдера КриптоПро, формат которого нигде не опубликован. Целью данной статьи является чтение контейнера и преобразование закрытого ключа в формат, который может быть прочитан в библиотеке OpenSSL. Долгое время было распространено ошибочное суждение, что достаточно сделать нечто вида (primary_key XOR masks_key) и мы получим закрытый ключ в чистом (raw) виде, однако забегая вперед, можно утверждать, что в КриптоПро было применено более сложное преобразование, в худшем случае состоящее из более чем 2000 (двух тысяч) операций хеширования.

Стоит упомянуть о существовании утилиты P12FromGostCSP которая позволяет конвертировать ключ в формат P12, доступный для работы с OpenSSL, но утилита имеет следующие существенные недостатки:

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

Изучаю вопрос работы с ЭЦП, которую теперь можно получить “бесплатно” (принесите только сертифицированный носитель). Однако, из документации получается, что для работы в ЛК ИП в налоговой нужно установить плагин в браузер, который в свою очередь хочет иметь Crypto Pro, которая платная.

Я всё правильно понял?
То есть для работы с бесплатной КЭП ЭЦП от налоговой нужно купить и Носитель, и лицензию КриптоПро?
—-
UPD: Что я выяснил в процессе

  • ЭЦП налоговой не работает с VipNet CSP! Просит именно CryptoPro CSP
  • CryptoPro CPS имеет 90 дней пробный период. Бессрочная лицензия в октябре 2021 стоит 2700р.
  • Вопрос задан

    более года назад

Крипто-про – криптопровайдер.
Для работы эцп обязателен криптопровайдер, но не обязательна Крипто-про. Есть бесплатные криптопровайдеры, но с ними тяжело, криво и сложно работать. Используйте либо триалку Крипто-про, она даётся на полгода. Либо купите бессрочную версию. Она стоит пару тысяч и закрывает вопрос с криптопровайдером навсегда.

P. S. До этого года эцп выдавали только коммерческие уц и просили за это ещё 5 т.р. сверх стоимости носителя и криптопровайдера, продлевать нужно было ежегодно. И никто не гудел. А сейчас вы покупаете за 2 т.р. Крипто-про, за 500 р носитель и можете на него записывать эцп, полученную в налоговой хоть сто лет.

P. P. S. Если надумаете брать Крипто-про, берите именно бессрочную версию. Всё продавцы норовят продать подписку на год, которая всего в 2-3 раза дешевле бессрочной версии.


Пригласить эксперта

Типо того.
Благо есть ломанные версии

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

Изучаю вопрос работы с ЭЦП, которую теперь можно получить “бесплатно”

А почему бесплатно в кавычках? Ее действительно делают бесплатно.

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

Плагину Crypto Pro не нужен, он будет работать и без него прекрасно. Crypto Pro нужен для использования подписи.

То есть для работы с бесплатной КЭП ЭЦП от налоговой нужно купить и Носитель, и лицензию КриптоПро?

Разумеется.

16 сент. 2022, в 17:15

70000 руб./за проект

16 сент. 2022, в 16:48

80000 руб./за проект

16 сент. 2022, в 16:02

500 руб./в час

Минуточку внимания

Картинка с бумажной подписью

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

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

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

Для меня эта история началась при заключении договора со страховой компанией ООО СК “Сбербанк страхование”. После оформления мне показались подозрительными некоторые факты (небольшой спойлер: всё оказалось хорошо) и я стал разбираться, как же мне проверить, что полученный документ действительно выдан страховой компанией, а не некими третьими лицами.

Что же меня насторожило?

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

Через полчаса ожидания я стал волноваться, быстрый поиск показал, что у страховой компании есть аж 3 разных активных домена: www.sberbank-insurance.ru, www.sberins.ru и sberbankins.ru, что не добавляло мне уверенности в компании.

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

Ключевые носители Рутокен и поддерживаемые ими режимы работы

Каждый Рутокен работает в одном, двух или трех режимах.

В таблице указаны носители, продемонстрировавшие работоспособность с соответствующими версиями КриптоПро CSP.

На пересечении строки с названием модели Рутокена и строки с версией КриптоПро CSP указаны режимы работы носителя.

Модель РутокенаВерсия КриптоПро CSP
4.0 R45.0 11455

5.0 R2 12000

(в т.ч. сборка с PKCS#11 модулями)

5.0 R3

Рутокен S

Рутокен Lite

Пассивный
(Режим CSP)

Пассивный
(Режим CSP)

Пассивный
(Режим CSP)

Пассивный
(Режим CSP)

Рутокен ЭЦП 2.0 2100 /
Рутокен ЭЦП 2.0 (2000) /
Рутокен ЭЦП 2.0 Flash /
Рутокен ЭЦП Bluetooth 

Пассивный
(Режим CSP)

Пассивный 
(Режим CSP)

Пассивный
(Режим CSP)

Пассивный
(Режим CSP)

Режим Активный токен без защиты канала (rutoken_crypt)Режим Активный токен (pkcs11_rutoken_ecp)Режим Активный токен
(pkcs11_rutoken_ecp)

Рутокен 2151 /

Смарт-карта Рутокен 2151

Не поддерживается

Не поддерживается

Пассивный 
(Режим CSP)

Пассивный 
(Режим CSP)

Режим Активный токен (pkcs11_rutoken_ecp)Режим Активный токен
(pkcs11_rutoken_ecp)
Рутокен ЭЦП PKIНе поддерживаетсяПассивный
(Режим CSP)
Пассивный
(Режим CSP)
Пассивный
(Режим CSP)

Рутокен ЭЦП 2.0 3000 

Рутокен ЭЦП 3.0 3100

Рутокен ЭЦП 3.0 3220

Пассивный
(Режим CSP)

Пассивный 
(Режим CSP)

Пассивный 
(Режим CSP)

Пассивный 
(Режим CSP)

Режим ФКН c защитой канала
(rutoken_fkc)
Режим Активный токен (pkcs11_rutoken_ecp)Режим Активный токен
(pkcs11_rutoken_ecp)
Режим ФКН c защитой канала (rutoken_fkc)Режим ФКН c защитой канала
(rutoken_fkc)

Рутокен ЭЦП 3.0 NFC 3100

(бесконтактное подключение)

Не поддерживается Не поддерживается 

Режим ФКН c защитой канала (rutoken_fkc_nfc) 

Режим ФКН c защитой канала (rutoken_fkc_nfc)

Рутокен ЭЦП 3.0 3100

Рутокен ЭЦП 3.0 NFC 3100

(

контактное подключение)

Не поддерживается Не поддерживается  

Пассивный 1
(Режим CSP)

Пассивный 1
(Режим CSP)

Режим Активный токен 1, 2 (pkcs11_rutoken_ecp)Режим Активный токен 1, 2
(pkcs11_rutoken_ecp)
Режим ФКН c защитой канала (rutoken_fkc_nfc)Режим ФКН c защитой канала (rutoken_fkc_nfc)
Смарт-карта
Рутокен ЭЦП 2.0 2100
Пассивный
(Режим CSP)

Пассивный 
(Режим CSP)

Пассивный
(Режим CSP)

Пассивный
(Режим CSP)

Режим Активный токен без защиты канала (rutoken_crypt)Режим Активный токен (pkcs11_rutoken_ecp)Режим Активный токен
(pkcs11_rutoken_ecp)

1 не работает в ОС Android и iOS

2 не поддерживается в ОС Аврора

Немного про корневые и промежуточные сертификаты

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

За дополнительной информацией я пошёл на сайт Минкомсвязи и нашёл такую страницу. Там можно скачать 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 у каждого сертификата указан путь к такому списку и он может отличаться от того, что написано в самом сертификате. Чему верить? Не совсем понятно.

криптопро протестировать ключ

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

После написания статьи осталось несколько открытых вопросов, которые хотелось бы обсудить с сообществом:

  1. аналоги КриптоПро, особенно opensource инструменты для создания и проверки ЭП;
  2. добавление валидации ЭП не только в Adobe Acrobat Reader DC, но и в Foxit Reader и другие;
  3. оставшиеся за пределами данной статьи проблемы, которые также важны и требуют внимания, но не проявились в моём случае.

UPD 0: В комментариях подсказали онлайн сервис на портале госуслуг для проверки ЭП документов: https://www.gosuslugi.ru/pgu/eds. К сожалению, не заработало в моём случае, но может быть полезно.

UPD 1: После написания статьи мне подсказали, что есть ещё один криптопровайдер, ViPNet CSP, который тоже может помочь с ГОСТовскими криптоалгоритмами в системе. Одновременная установка его с КриптоПро CSP под вопросом.

КДПВ: edar, Pixabay

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

Всегда-ли вы проверяете ЭЦП в полученных электронных документах?

Проголосовали 70 пользователей.

Воздержались 28 пользователей.

Как проверить наличие встроенной лицензии КриптоПро в сертификат электронной подписи?


Встроенная в сертификат лицензия КриптоПро CSP даёт возможность использовать электронную подпись на любом компьютере без дополнительного приобретения лицензии программы КриптоПро.

Встроенная лицензия действует до окончания срока действия сертификата электронной подписи.

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

1 способ. Проверка встроенной лицензии через программу КриптоПро CSP

1. Открываем программу КриптоПро CSP (ярлык может быть расположен в Панели управления или меню «Пуск»).

2. После запуска программы переходим на вкладку «Сервис» и нажимаем на кнопку «Просмотреть сертификаты в контейнере».

криптопро протестировать ключ

Рис. 1. вкладку «Сервис»

3. В открывшемся окне нажимаем на кнопку «Обзор».

криптопро протестировать ключ

Рис. 2. кнопку «Обзор»

4. Из представленного списка контейнеров выбираем нужную подпись.

Подпись УЦ ФНС обозначается случайным набором символов и находится на защищённом носителе (Рутокен, Джакарта).

Выделяем подпись и нажимаем на кнопку «ОК» и «Далее».

Выделение сертификата электронной подписи

Рис. 3. Выделение сертификата электронной подписи

5. Открывается информация о сертификате, выбираем «Свойства».

Свойства

Рис. 4. Свойства

6. Открыв сертификат электронной подписи, переходим во вкладку «Состав» и находим среди полей «Ограниченная лицензия КРИПТО-ПРО».

Присутствие этого поля означает наличие встроенной лицензии КриптоПро CSP.

Если такого поля нет, то и встроенной лицензии нет.

Поле «Ограниченная лицензия КРИПТО-ПРО»

Рис. 5. Поле «Ограниченная лицензия КРИПТО-ПРО»

2 способ. Проверка встроенной лицензии через КриптоПро PKI

КриптоПро PKI устанавливается автоматически с установкой программы КриптоПро CSP. Как скачать и установить КриптоПро CSP, рассказали тут

1. Через меню ПУСК находим и открываем «Управление лицензиями КриптоПро PKI».

криптопро протестировать ключ

Рис. 6. Управление лицензиями КриптоПро PKI

2. Слева необходимо выбрать «КриптоПро CSP».

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

Отображаются только сертификаты, установленные в хранилище «Личное».

Как установить сертификат электронной подписи в хранилище «Личное», рассказали в данной инструкции под пунктом «Установка электронной подписи.»

криптопро протестировать ключ

Рис. 7. КриптоПро CSP

Работаете в 1С?

Не забудьте активировать сервис «1С-Отчетность»
для сдачи отчетов в контролирующие органы,
он уже встроен в вашу программу.

ПОДРОБНЕЕ О СЕРВИСЕ 1С-ОТЧЕТНОСТЬ

Возврат к списку


Комментарии пользователей

Названия режимов работы

Самым безопасным вариантом хранения контейнера с сертификатом и ключом электронной подписи (ЭП) является ключевой носитель, защищенном PIN-кодом. Такие носители существуют в двух более распространенных форм-факторах: USB-токен и смарт-карта.

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

  • Пассивный (Режим CSP). Контейнер генерируется через программный криптопровайдер КриптоПро CSP. В таком режиме контейнер с ключом ЭП и сертификатом хранится на токене или смарт-карте и передается криптопровайдеру, работающему в операционной системе, который уже решает, что с ним делать. Такой контейнер будет неэкспортируемым, если при его создании будут выполнены специальные настройки. Если контейнер будет создан как экспортируемый, то его можно скопировать на другой носитель.
    Данный режим создает извлекаемые ключи.
  • Активный (Активный токен без защиты канала). Контейнер генерируется при помощи внутреннего криптоядра Рутокена семейства ЭЦП, с использованием библиотеки PKCS#11. В таком режиме контейнер тоже хранится на токене или смарт-карте. Отличие в том, что пользователь может получить от этого носителя результат выполнения криптографических операций с использованием хранимого на устройстве закрытого ключа, поэтому такие ключи нельзя украсть или скопировать. В данном случае ключ является неизвлекаемым. Активные носители имеют возможность хранить контейнеры в пассивном режиме, что снижает безопасность ключа.

  • Функциональный ключевой носитель (Режим ФКН c защитой канала).  В таком режиме добавлена поддержка работы с неизвлекаемыми ключами по протоколу SESPAKE. Этот протокол позволяет реализовать процесс аутентификации не передавая PIN-код в открытом виде. Также SESPAKE позволяет установить шифрованный канал для обмена сообщениями между криптопровайдером и носителем.
    Устройства типа ФКН можно использовать как утройства типа Активный и Пассивный.

Глава первая

Все манипуляции с 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 проверка ЭП неполная, нет долгожданной зелёной галочки. Нужно копать дальше, вероятно есть решения.

Сложный случай

Если компьютер не видит ЭЦП что делать? При этом плагин не видит сертификат, а он установлен и сайт добавлен в доверенные. Ошибка редко, но порой возникает даже у тех пользователей, которые выполнили все требования инструкции по использованию СКЗИ. Например, установили корневой сертификат. Процедура подробно описана на странице 35 в пункте 2.5.2, который называется «Просмотр и установка личного сертификата, хранящегося в контейнере закрытого ключа». Если после всех выполненных требований компьютер всё равно не видит электронную подпись (отсутствие сертификата на cryptopro.ru) то проблема, скорее всего, в списке отзыва сертификатов удостоверяющего центра (УЦ). Если доступ к интернету у компании, эксплуатирующей ЭЦП, был осуществлён через прокси-сервер, то в онлайн-режиме программа не увидит установленный сертификат в справочнике отзыва. Всё заработает, если поставить данный справочник локально на компьютер.

Проверка лицензии КриптоПро CSP встроенной в сертификат ЭП

1 способ. Проверка через КриптоПро PKI

Запустите программу КриптоПро PKI.
Найти её можно в меню “Пуск”

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

криптопро протестировать ключ

2 способ. Проверка через Состав сертификата

Откройте ваш сертификат электронной подписи.
На вкладке «Состав» найдите среди полей «Ограниченная лицензия КРИПТО-ПРО»

Присутствие этого поля означает наличие встроенной лицензии КриптоПро CSP.
Если такого поля нет, то и встроенной лицензии нет.

криптопро протестировать ключ

Файл masks. key

Содержит 32 байта маски ключа в формате Asn1, зашифрованного на ключе хранения pwd_key. Далее 12 байт «затравочной» информации для генерации ключа хранения pwd_key, если криптоконтейнер защищен паролем, то пароль также участвует в генерации ключа хранения.

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

masks.key

Читаем закрытый ключ и конвертируем

Файл 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; }

Глава вторая

Порывшись в почте, я нашел еще один электронный договор. По счастливой случайности, им тоже оказался страховой полис, но на этот раз еОСАГО от АО “Тинькофф Страхование”. Открываем сертификат, смотрим выпустившую сертификат организацию. Ей оказывается АО “Тинькофф банк”. Да, оказывается у них есть свой УЦ, который выдает сертификаты дочерним организациям (у Сбербанка тоже есть свой УЦ, но в дочерних структурах он не используется).

По отработанному алгоритму идём в поисковую систему с запросом “тинькофф сертификат”, находим официальный сайт УЦ АО Тинькофф Банк. Тут нас встречает изобилие ссылок на корневые сертификаты, списки отозванных сертификатов и даже видеоинструкция по их установке. Скачиваем “Цепочка корневых сертификатов УЦ АО Тинькофф Банк ГОСТ Р 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 также подтвердил, что подпись действительна.

криптопро протестировать ключ

На этом приключения с проверкой ЭП на полисе еОСАГО завершаются. Заметно, что после того, как в системе уже установлен необходимый софт, а пользователь понимает принципы работы и поиска промежуточных сертификатов, то проверка подписи занимает уже меньше времени.

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

Как должно работать

Почему не видит ЭЦП компьютер? Вроде и ключ в виде флешки есть (тот же RuToken), и утилита «Крипто-Про» установлена, а проверка ЭП не выполняется. Основная причина — ПК изначально не видит флешку ЭЦП. Это возникает обычно, потому что ключ пытаются запустить на устройстве с неподдерживаемой ОС. Ведь каждый ключик-флешка делается под свою среду, и банальное обновление ОС может привести к потере совместимости с имеющимся ключом ЭЦП (флешкой).

Когда установка криптопровайдера выполнена на поддерживаемом аппарате, по инструкции, но всё равно компьютер не видит ЭЦП, проблема может быть и в самом ключе. Чтобы разобраться, свяжитесь с поддержкой. Там у вас запросят скриншоты:

  • версии/сборки CSP (вкладка «Общие»);
  • ошибок при подключении контейнера ЭЦП.

Кроме того, укажите специалистам, где получали ЭЦП, на каком носителе у вас установлен контейнер (рутокен, етокен, флешка или реестр) и какая используется ОС (разрядность, сборка).

Сборка утилиты конвертирования ключа

Далее сборка исходников описана для 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

Все работает просто замечательно!

Спасибо за внимание. Это была моя первая статья на хабре.

Использование Активного режима

Подписание документов будет происходить на неизвлекаемых аппаратных ключах. Этот режим предотвращает извлечение ключа в память компьютера в момент подписания.Устройства в режиме ФКН можно использовать как устройства в режиме Активный.

Генерация неизвлекаемых ключей на Рутокенах в КриптоПро CSP 5.0

Генерация неизвлекаемых ключей на Рутокенах в КриптоПро CSP 5.0 R2

Настройка КриптоПРО для работы с 1С-ЭДО в Linux

Дата обновления: 28.06.2022

Номер карточки: SD0008588

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

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

Для работы с системой маркировки и для подачи заявления на сертификат потребуется установка внешней компоненты – установка запускается автоматически при первом обращении к указанному функционалу.

Загрузка КриптоПро CSP для Linux (на примере ОС Ubuntu).

Для загрузки криптопровайдера необходимо:

1.1 Авторизоваться на официальном сайте производителя.

1.2 Перейти на вкладку «Скачать» и выбрать «КриптоПро CSP».

LinuxCSPCrypto-1.png

1.3 Выбрать последнюю сертифицированную версию КриптоПро CSP для Linux соответствующую разрядности системы, а также формату пакетов и сохранить дистрибутив.

LinuxCSPCrypto-2.png

Установка КриптоПро CSP для Linux.

2.1. Открыть «Загрузки» и распаковать скаченный архив linux-amd64_deb.tgz в текущую папку.

LinuxCSPCrypto-3.png

2.2 Выбрать правой кнопкой мыши распакованную папку linux-amd64_deb и выполнить команду «Открыть в терминале».

LinuxCSPCrypto-4.png

2.3 Для запуска мастера установки КриптоПро в терминале требуется выполнить команду sudo ./install_gui.sh

LinuxCSPCrypto-5.png

При необходимости процесс установки можно полностью инициировать через терминал

cd Загрузки – перейти в каталог со скаченным архивом linux-amd64_deb.tgz

tar -zxf ./linux-amd64_deb.tgz – извлечь содержимое архива в текущую папке

cd linux-amd64_deb – перейти в распакованную папку

sudo ./install_gui.sh – запустить мастер установки

2.4 Откроется установщик КриптоПро CSP. Нажимаем «Далее».

LinuxCSPCrypto-7.png

2.5 Если на данном рабочем месте будет осуществляться работа со съёмными токенами, то в наборе для установки следует отметить «Поддержка токенов и смарт-карт» (для выбора следует использовать пробел). Затем нажимаем «Далее».

LinuxCSPCrypto-8.png

2.6 На следующем шаге нажимаем «Установить».

LinuxCSPCrypto-9.png

2.7 Установка произошла успешно. Нажимаем «ОК».

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

Настройка программы для работы с электронной подписью осуществляется в разделе Администрирование – Обмен электронными документами – Настройки электронной подписи и шифрования – Программы.

LinuxCSPCrypto-11.png

В списке программ необходимо открыть КриптоПро CSP (ГОСТ 2012/256) и выбрать КриптоПро CSP (ГОСТ 2012/256) КС1

Если используется клиент-серверный режим запуска совместно с КриптоПРО версии 4, и пользователь планирует использовать информационную базу с рабочих мест с ОС Windows, то следует добавить в КС1-Провайдер имя программы в ожидаемом для ОС Windows виде:

cpconfig -ini ‘\cryptography\Defaults\Provider\Crypto-Pro GOST R 34.10-2012 Cryptographic Service Provider’ -add string ‘Image Path’ /opt/cprocsp/lib/ia32/libcsp.so
cpconfig -ini ‘\cryptography\Defaults\Provider\Crypto-Pro GOST R 34.10-2012 Cryptographic Service Provider’ -add string ‘Function Table Name’ CPCSP_GetFunctionTable
cpconfig -ini ‘\cryptography\Defaults\Provider\Crypto-Pro GOST R 34.10-2012 Cryptographic Service Provider’ -add long Type 80

Подробнее

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

LinuxCSPCrypto-13.png

/opt/cprocsp/lib/amd64/libcapi10.so:/opt/cprocsp/lib/amd64/libcapi20.so – стандартный путь к программе КриптоПро CSP для Linux

Если при установке КриптоПро были выбраны нестандартные пути для установки – в данном поле необходимо указывать те пути, по которым размещены библиотеки КриптоПро.
Также хотелось бы отметить, что у пользователя, из-под которого будет запускаться 1С, должны быть назначены разрешающие права доступа на папки, в которых расположены библиотеки КриптоПро.

Для работы в веб-клиенте требуется установка внешней компоненты для работы с криптографией под конкретный браузер.

LinuxCSPCrypto-42.png

Работа с сертификатами на Linux с использованием КриптоПро.

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

4.1 Контейнер хранится на аппаратном ключевом носителе (токене)

4.1.1 Для работы с ключевыми носителями потребуется установить дополнительные библиотеки через соответствующие команды в Терминале.

apt-get install libpcsclite1 pcscd libccid

4.1.2 После установки необходимых пакетов пользователю требуется вставить токен, открыть Инструменты КриптоПро CSP и перейти на вкладку «Контейнеры». Необходимый контейнер должен отображаться с соответствующим типом считывателя.

LinuxCSPCrypto-14.1.png

В списке контейнеров необходимо выбрать интересующий и нажать «Установить сертификат».

LinuxCSPCrypto-14.2.png

Открытый ключ будет автоматически установлен в хранилище и доступен для просмотра на вкладке «Сертификаты»

Если кнопка «Установить сертификат» не активна, это означает, что в контейнере отсутствует открытый ключ. Для решения данной проблемы следует перейти к п.6.1 данной инструкции.

4.2 Контейнер хранится на съёмном носителе.

4.2.1 Пользователю требуется вставить съемный носитель, открыть Инструменты КриптоПро CSP и перейти на вкладку «Контейнеры». Необходимый контейнер должен отображаться с соответствующим типом считывателя. В списке контейнеров необходимо выбрать интересующий и нажать «Установить сертификат».

LinuxCSPCrypto-16.png

Открытый ключ будет автоматически установлен в хранилище и доступен для просмотра на вкладке «Сертификаты».

LinuxCSPCrypto-15.png

Если кнопка «Установить сертификат» не активна, это означает, что в контейнере отсутствует открытый ключ. Для решения данной проблемы следует перейти к п.6.1 данной инструкции.

4.2 Перенос контейнера со съёмного носителя на жёсткий диск.

4.2.1 Для переноса закрытого ключа на жёсткий диск необходимо вставить съёмный носитель, затем открыть КриптоПро CSP и перейти на вкладку «Контейнеры», выбрать необходимый контейнер, затем нажать «Скопировать контейнер».

LinuxCSPCrypto-16.png

4.2.2 В появившемся окне необходимо выбрать «Директория» и нажать «ОК».

LinuxCSPCrypto-17.png

4.2.3 В появившемся окне необходимо ввести пароль от контейнера сертификата и нажать «ОК».

LinuxCSPCrypto-18.png

4.2.4 Затем необходимо задать новый пароль для копии контейнера или оставить его без пароля.

LinuxCSPCrypto-19.png

4.2.5 Контейнер успешно скопирован на жесткий диск.

LinuxCSPCrypto-20.png

4.2.6 Затем необходимо произвести установку сертификата. Для этого требуется выбрать скопированный контейнер со считывателем HDIMAGE и нажать «Установить сертификат». Открытый ключ будет автоматически установлен в хранилище и доступен для просмотра на вкладке «Сертификаты».

LinuxCSPCrypto-21.png

Если кнопка «Установить сертификат» не активна, это означает, что в контейнере отсутствует открытый ключ. Для решения данной проблемы следует перейти к п.6.1 данной инструкции.

Статья по переносу закрытых ключей из Vipnet в КриптоПро

4.3 Перенос контейнера из папки на жёсткий диск.

4.3.1 Для переноса контейнера из папки на жёсткий диск, пользователю необходимо выбрать папку с содержимым закрытого ключа (файлы расширением .key) и нажать «Копировать в…»

LinuxCSPCrypto-23.png

4.3.2 В открывшемся окне необходимо перейти к каталогу Компьютер/var/opt/cprocsp/keys/<ИмяПользователя>/ и нажать «Выбрать»

LinuxCSPCrypto-24.png

4.3.3 После этого необходимый закрытый ключ отобразится в КриптоПро CSP на вкладке «Контейнеры».

LinuxCSPCrypto-25.png

4.3.4 Затем необходимо произвести установку сертификата. Для этого требуется выбрать скопированный контейнер со считывателем HDIMAGE и нажать «Установить сертификат». Открытый ключ будет автоматически установлен в хранилище и доступен для просмотра на вкладке «Сертификаты».

Если кнопка «Установить сертификат» не активна, это означает, что в контейнере отсутствует открытый ключ. Для решения данной проблемы следует перейти к п.6.1 данной инструкции.

Выполните настройку электронного документооборота согласно видеоинструкции. Типичные ошибки и способы их устранения.

6.1 Сертификат не установлен на компьютере.

Вариант 1. (Установка через криптопровайдер).

Пользователю необходимо скопировать сертификат открытого ключа в папку «Загрузки».

Для установки открытой части ключа пользователю необходимо открыть КриптоПро CSP, перейти на вкладку «Сертификаты», а затем нажать «Установить сертификаты».

В открывшемся окне требуется выбрать необходимый сертификат (файл c расширением .cer) и нажать «Открыть».

LinuxCSPCrypto-29.png

Сертификат автоматически определит подходящий контейнер.

Вариант 2 (Установка через терминал).

Пользователю необходимо скопировать сертификат открытого ключа в папку «Загрузки».

LinuxCSPCrypto-27.png

Открыть терминал (Ctrl+Alt+T) и выполнить команду по установке сертификата (открытого ключа).

/opt/cprocsp/bin/amd64/certmgr -inst -f ~/Загрузки/&lt;имя сертификата&gt;.cer -ask-container

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

Пользователю потребуется выбрать контейнер

1) \\.\HDIMAGE\ООО «Тестовая организация №1»

LinuxCSPCrypto-30.png

Выберите контейнер, к которому относится сертификат. Например, введите 1 и нажмите «Enter».

Сертификат будет связан с контейнером и установлен в хранилище «Личное».  ErrorCode: 0x00000000 свидетельствует об отсутствии ошибок.

LinuxCSPCrypto-31.png

LinuxCSPCrypto-32.png

6.2 Цепочка сертификатов обработана, но прервана на корневом который не является доверенным.

LinuxCSPCrypto-33.png

Вариант 1. (Установка через криптопровайдер).

Для установки доверенного корневого сертификата следует открыть КриптоПро CSP, перейти на вкладку «Сертификаты», затем в списке выбрать личный сертификат, при работе с которым выходит ошибка и нажать «Свойства сертификата».

LinuxCSPCrypto-34.png

В открывшемся окне необходимо скопировать ссылку URL сертификата УЦ и вставить её адресную строку браузера. Произойдёт загрузка доверенного корневого сертификата удостоверяющего центра.

LinuxCSPCrypto-35.png

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

LinuxCSPCrypto-36.png

В появившемся окне необходимо нажать «ОК».

LinuxCSPCrypto-37.png

Вариант 2 (Установка через терминал).

Пользователю требуется скачать необходимый доверенный сертификат способом указанным выше, а затем перейти терминал (Ctrl+Alt+T)   и выполнить команду по установке доверенного корневого сертификата.

/opt/cprocsp/bin/amd64/certmgr -inst -store root -f ~/Загрузки//&lt;имя сертификата&gt;.crt

LinuxCSPCrypto-39.png

В появившемся окне необходимо нажать «ОК».

LinuxCSPCrypto-40.png

Сертификат будет установлен в хранилище «Доверенные корневые центры сертификации».  ErrorCode: 0x00000000 свидетельствует об отсутствии ошибок.

LinuxCSPCrypto-41.png

LinuxCSPCrypto-38.png

Также вам может быть интересно:

Что нужно для подключения 1С-ЭДО

Стоимость сервиса 1С-ЭДО

Создание профиля ЭДО. Отправка приглашений контрагенту

Не ставится ключ/сертификат

Почему «КриптоПро» CSP может не видеть ключей на Рутокен? Следует проверить такие параметры:

  • корректно ли установлена программа (запущена ли служба Windows Installer);
  • есть доступ в сеть;
  • выдан корректный ключ в сертифицированном центре.

В принципе нужно диагностировать две причины, почему «КриптоПро» не видит Рутокен. Первая – это отсутствие ключей на Рутокене. Чтобы проверить, не пустой ли Рутокен, нужно понять, есть ли свободное место на нем. Для этого в окне «Информация о Рутокене» посмотрите объем занятого места. Контейнер Крипто-про занимает примерно 4 килобайта.
Второй причиной, почему «КриптоПро» не видит ключи на Рутокен, является некорректный просмотр. Т.е. вы не можете просмотреть сертификат подписи. В этом случае вам необходимо обратиться в УЦ, который выдавал подпись.

При установке желательно делать так:

криптопро протестировать ключ

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

криптопро протестировать ключ

указать через «Обзор» расположение файла сертификата с расширением. cer

криптопро протестировать ключ

выбрать контейнер закрытого ключа (через «Обзор» выбрать сертификат на считывателе — флешке/дискете)

Если когда-то были неправильно установлены предыдущие ключи и новый носитель не устанавливается, то нужно очистить реестр (Windows). Для этого в панели CSP есть кнопка «Удалить запомненные пароли».

Если в событиях приложений ошибок не было, а в системе евент-логи их показали, необходимо проверить файлы Sfc/scannow, а после перерегистрировать компоненты MSIExec/unregister, потом — MSIExec/regserver.

Файл 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 байт открытого ключа (подчеркнуто) для контроля правильности чтения закрытого.

header.key

Компьютер не видит сертификат ЭЦП

Если компьютер не видит сертификат электронной подписи, то в операционной системе Windows нужно пройти по адресу:

Пуск — Панель управления — КриптоПРО CSP — Сервис — Протестировать — По сертификату.
Так можно понять, установлен ли сертификат в Личное хранилище пользователя с привязкой к RuToken-у.

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

Пуск — Все программы —КРИПТО-ПРО — Настройки ЭЦП browser Plug-In.

Лучше использовать браузер Internet Explorer, так как java script может некорректно работать в других браузерах.

Если компьютер не видит ЭЦП, то в первую очередь необходимо посетить тематический форум компании КриптоПро. Если вопрос не будет решён собственными силами, тогда обратиться в службу поддержки (прислать туда евент-логи системы и приложений, указать версию/сборку CSP, ОС).

Использования ФКН режима

В КриптоПро CSP и Рутокенах с поддержкой ФКН реализован криптографический протокол SESPAKE. При работе будет устанавливаться зашифрованный канал для обмена сообщениями между криптопровайдером и носителем.

Генерация контейнера ФКН на Рутокен ЭЦП 2.0 3000 с помощью КриптоПро CSP 5.0

Как проверить, что ключи на Рутокен ЭЦП 2.0 3000 сгенерированы в формате ФКН?

Генерация контейнера ФКН на смарт-карте Рутокен ЭЦП 3.0 NFC с помощью КриптоПро CSP 5.0 R2

Как проверить, что ключи на смарт-карте Рутокен ЭЦП 3.0 NFC сгенерированы в формате ФКН?

Читайте также:  Электронная подпись для Росреестра: какая нужна, как получить ЭЦП
Оцените статью
ЭЦП Эксперт
Добавить комментарий