Криптопро эцп sdk что это
В данной статье рассмотрим использование электронно-цифровой подписи на сайте.
Что необходимо, чтобы человек смог использовать электронно-цифровую подпись на сайте?
1) СКЗИ (средство криптографической защиты информации)
Мой опыт работы показывает, что порядка 90% использует КриптоПро CSP (скачать), который в явном или неявном виде продвигают удостоверяющие центры. Порядка 10% VipNet CSP (), который можно использовать бесплатно. С остальными СКЗИ на практике не встречался.
2) КриптоПро ЭЦП Browser plug-in (страница плагина).
3) Установленная подпись (хотя бы одна).
Проверка возможности осуществления подписи
javascript (+jquery)
1) Попытка создать объект cades.
Нужно сделать примечание, что тут и далее, будет деление на браузер с ActiveX(читай IE) и остальные.
Проверка будет осуществляться:
Если проверка прошла неудачно, то уведомляем об этом пользователя.
Стоит иметь ввиду, что после обновления хрома до версии 42 (спасибо статье за информацию) нужно включить:
Следующая проверка — а разрешен ли плагин для запуска (не для IE проверка)?
Проверяем на СКЗИ путем попытки открыть хранилище.
Проверяем на существование сертификатов в хранилище:
И их количество (бывает, что Certificates есть, но пуст, что нам тоже не подойдет):
Первый шаг сделали — проверили возможность подписания чего-либо.
Выбор электронной цифровой подписи
У клиента может быть установлено несколько сертификатов. Сертификаты могут быть от разных удостоверяющих центров (УЦ), выданными быть разным людям, с разными датами выдачами, поэтому надо предоставить выбор, каким именно он хочется воспользоваться.
1) Группируем по удостоверяющим центрам
Информация об удостоверяющем центре хранится в сертификате.
certs.Item(i).GetInfo(1)
где certs — сертификаты из хранилища, см выше
i — порядковый номер сертификата от 1 (обратите внимание) до certs.Count.
Обратите внимание, что, в случае «кривых» сертификатов, вернуться может и undefined, имеет смысл сделать один дефолтный УЦ для таких случаев.
Теперь мы знаем список УЦ, услугами которых воспользовался клиент.
Запоминаем их и выведем через optgroup.
Сам text у option будет таким:
в cert.GetInfo(6) — кому выдан сертификат
в ValidFromDate — с какого срока сертификат начал/начнет действие
в ValidToDate — соответственно, до какого срока
Ну и форматирование даты стандартное:
Еще можно подсветить option.
Зеленым — для работоспособных сертификатов, красным — нет.
Информацию можно получить при помощи самого сертификата.
Стоит отметить, что сама по себе данная проверка имеет малую ценность, ибо все причины не может отсечь.
Но самые базовые, например, проверка даты — проверяет.
В value у option запишем отпечаток cert.Thumbprint .
Можно порядковый номер записать, можно другие данные — на ваше усмотрение.
Подписание
Ну и, собственно, самый главный шаг, к которому мы стремились — подписание.
1) Находим выбранный сертификат.
Для нашего примера:
0 — означает, что мы ищем по отпечатку
1 — что используем первый результат выборки (по факту единственный)
КриптоПро — это программа шифрования информации заказчика. Такое ПО обязательно понадобится при электронном документообороте и использовании ЭЦП.
Обзор изменений по работе с ЭЦП с июля 2020 года
Изменения позволят применять один квалифицированный сертификат ключа проверки электронной подписи для работы с разными порталами. Ужесточат требования к удостоверяющим центрам. Подробнее об этих и других новшествах читайте в нашем обзоре.
Важное вступление
В гайде описывается формирование отсоединенной подписи в формате PKCS7 (рядом с файлом появится файл в формате .sig). Такую подпись может запросить нотариус, ЦБ и любой кому нужно долгосрочное хранения подписанного документа. Удобство такой подписи в том, что при улучшении ее до УКЭП CAdES-X Long Type 1 (CMS Advanced Electronic Signatures [1]) в нее добавляется штамп времени, который генерирует TSA (Time-Stamp Protocol [2]) и статус сертификата на момент подписания (OCSP [3]) - подлинность такой подписи можно подтвердить по прошествии длительного периода (Усовершенствованная квалифицированная подпись [4]).
Соберем проект с поддержкой ГОСТ Р 34.11-2012 256 bit
Гайд разделен на несколько этапов. Основная инструкция по сборке опубликована вместе с репозиторием DotnetCoreSampleProject - периодически я буду на нее ссылаться.
Так, а что надо на выходе?
А на выходе надо получить готовое решение, которое сделает отсоединенную ЭП в формате .sig со штампом времени на подпись и доказательством подлинности. Для этого зададим следующие критерии:
КриптоАРМ после проверки подписи
Заполнит поле "Время создания ЭП" - в конце проверки появится окно, где можно выбрать ЭП и кратко посмотреть ее свойства
В информации о подписи и сертификате (двойной клик по записе в таблице) на вкладке "Штампы времени" в выпадающем списке есть оба значения и по ним заполнена информация:
В протоколе проверки подписи есть блоки "Доказательства подлинности", "Штамп времени на подпись" и "Время подписания". Для сравнения: если документ подписан просто КЭП, то отчет по проверке будет достаточно коротким в сравнении с УКЭП.
КриптоПро ЭЦП SDK (версия 2.00.13168 для Windows и 2.0.13292 для Unix-платформ)
Особенности данной версии:
- Актуальная, развивающаяся версия, находится в процессе сертификации.
- Поддерживает работу с алгоритмами ГОСТ Р 34.10/11-2012 (при использовании с КриптоПро CSP 4.0 и выше).
- Для Microsoft Windows совместима с КриптоПро CSP версии 3.6 R4 и выше, для других ОС – с КриптоПро CSP версии 4.0 и выше.
- Компоненты КриптоПро TSP Client 2.0 и КриптоПро OCSP Client 2.0, входящие в данную версию, не принимают лицензию от версий 1.x.
- Минимальная поддерживаемая версия Microsoft Windows — Windows XP.
- Версия для Windows совместима с КриптоПро OCSP SDK версии 2.0.13123 и с КриптоПро TSP SDK версии 2.0.13118.
Загрузить:
Предыдущие версии
Пробный запуск
Для подписания возьмем PDF-документ, который содержит надпись "Тестовое заявление.":
Больше для теста нам ничего не надо
Далее запустим программу и дождемся подписания файла:
Готово. Теперь можно приступать к проверкам.
Проверка в КриптоАРМ
Время создания ЭП заполнено:
Штамп времени на подпись есть:
Доказательства подлинности также заполнены:
В протоколе проверки есть блоки "Доказательства подлинности", "Штамп времени на подпись" и "Время подписания":
Проверка на Госуслугах
Проверка в Контур.Крипто
Безусловно это решение не стоит брать в работу "как есть" и нужны некоторые доработки, но в целом оно работает и подписывает документы подписью УКЭП.
Как установить программу КриптоПро
Если вы устанавливали криптографическое ПО ранее, проверьте действующую версию. Бесперебойная работа обеспечивается только в актуальных версиях программы. Если установленная версия устарела, вам понадобится не установка КриптоПро, а обновление, то есть переустановка. Переустановить придется и при переходе с демонстрационной на основную версию ПО.
Перед началом переустановки проверьте наличие действующих лицензий и сертификатов. Если они отсутствуют, то сохраните и выгрузите регистры. Затем перейдите в блок «Поддержка» на официальном сайте разработчика. Вам понадобится раздел «Центр загрузки».
Вам понадобится утилита очистки следов программного продукта cspclean.exe. Установите и запустите ее.
По окончании работы инструмента очистки приступайте к установке нового программного обеспечения актуальной версии. Вот инструкция, как установить КриптоПро бесплатно:
Шаг 1. Загружаем КриптоПро ЭЦП Browser plug-in. Загрузка производится через официальный сайт разработчика в блоке «Продукты».
Шаг 2. Запускаем установочный файл.
Шаг 3. Подтверждаем установку.
Шаг 4. Разрешаем программе внести изменения в компьютер.
Шаг 5. Ждем, пока закончится установка.
Шаг 6. Нажимаем «ОК», установка плагина завершена.
Шаг 7. Переходим в раздел «Сертификаты» блока «Продукты» и проверяем наличие сертификации у выбранного типа программного обеспечения.
Все сертификаты доступны к скачиванию.
Инструменты подписи
Использовалась версия Java: «1.8.0_111» HotSpot(TM) 64-Bit Server VM (build 25.111-b14).
В качестве сертифицированного средства защиты информации от лицензированного разработчика применяем криптографический провайдер КриптоПро CSP v4.0 и КриптоПро JCP – v.2.0, с установкой модуля КриптоПро Java CSP v.4.0
Почему КриптоПро JCP – v.2.0, с модулем КриптоПро Java CSP v.4.0?
Потому, что провайдер КриптоПро JCP после длительного несертифицированного периода получил сертификат соответствия от регулятора до 31.12.2018, а дальше, по информации от разработчика, с сертификацией может вновь возникнуть неопределенность. Модуль КриптоПро Java CSP v.4.0 не выполняет в себе криптографических преобразований и является по сути API к провайдеру КриптоПро CSP, с очередной сертификацией которого вопросов нет. Здесь нужно сказать, что действующий сертификат на СКЗИ не обязателен при условии использования криптографического провайдера исключительно для внутренних целей.
Не забываем, что должны быть сняты экспортные ограничения платформы Java, которые блокируют работу криптографических провайдеров с российскими алгоритмами шифрования.
Для этого в ../java/jdk1.8.x_xxx/jre/lib/security необходимо заменить файлы local_policy.jar и US_export_policy.jar на предоставленные по адресу: Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files 8 Download
и содержащие в default_local.policy и default_US_export.policy:
Далее нужно собрать полученную библиотеку из обновленного исходного кода и подключить к приложению.
В составе КриптоПро JCP можно найти много примеров в файле samples-sources.jar. В частности, там есть примеры подписи и проверки ЭП PDF-документов. (\PDF\SignVerifyPDFExample.java).
Как использовать КриптоПро
Вы установили плагин и проверили сертификат. Но установка на этом не завершена. ПО необходимо ввести в эксплуатацию на вашем ПК и от имени конкретного пользователя. Вот инструкция, как пользоваться КриптоПро бесплатно:
Шаг 1. Для дальнейшей работы надлежит загрузить установочные файлы. Переходим в блок «Продукты», раздел «Загрузка файлов».
Если ранее вы не регистрировались, пройдите полную процедуру регистрации.
После ввода всех данных ознакомьтесь с лицензионным соглашением и поставьте согласие под условиями разработчика.
Шаг 3. Выбираем нужный дистрибутив, находим установочный файл и запускаем его. Все, установка завершена. Демонстрационная версия активна в течение 90 дней с момента установки.
Об авторе этой статьи
Александра Задорожнева Бухгалтер, эксперт проекта Практикующий бухгалтер.
Работаю с начала учебы в ВУЗе. Есть опыт работы и в коммерции, и в бюджете. С 2006 по 2012 работала бухгалтером-кассиром и кадровиком. С 2012 по настоящее время — главный бухгалтер в бюджетном учреждении. Помимо прямой бухгалтерии занимаюсь закупочной и планово-экономической деятельностью. 4 года пишу тематические статьи для профильные изданий.
КриптоПро ЭЦП Browser plug-in предназначен для создания и проверки электронной подписи (ЭП) на веб-страницах с использованием СКЗИ «КриптоПро CSP».
Применение электронной подписи PDF-документов
На мой взгляд, подпись непосредственно в PDF формате является частным случаем. Такой штамп в самом файле предназначен скорее для визуализации ЭП с целью проверки ее глазами. Это удобно и эффектно, когда речь идет о небольшом количестве документов, где не требуется автоматизация, а роль проверяющего выполняет оператор.
С интенсивным процессом обмена большим количеством электронных документов, оператор не справится. В этом случае информационная система выполняет автоматизацию, и необходимость в красивой визуализации отпадает. Соответственно излишне тратить ресурсы информационной системы и электронных каналов, на передачу объемных PDF файлов и обработку изображений штампа.
Тот же документ PDF можно подписать по стандарту CAdES отсоединенной подписью, в итоге будет два файла — сам PDF и контейнер с подписью.
В сфере деятельности, связанной с разработкой коммерческого программного обеспечения со встроенными СКЗИ, такой подход недопустим, патчи, обновления и доработки должны выполняться организацией-лицензиатом. Поэтому приведенный в посте способ подписи PDF-документа можно применять с целью демонстрации возможностей и для внутреннего использования.
Проблемы и трудности сборки
После успешного обновления исходного кода itextpdf в нем появляются зависимости на пакеты ru.CryptoPro.JCP и ru.CryptoPro.reprov.x509.
Без них проект с исходным кодом itextpdf_5.1.3.gost не соберется.
Итак, библиотека собрана, подключаем ее в приложение. И тут возникает основная проблема. iTextpdf_5.1.3 содержит зависимость на Bouncy Castle версии 1.46 – библиотеку с открытым кодом, реализующую криптографический провайдер и поддержку ASN.1 структур.
Поставка КриптоПро JCP 2.0 в свою очередь имеет зависимости на Bouncy Castle версии 1.50 bcpkix-jdk15on-1.50 и bcprov-jdk15on-1.5, соответственно, они помещаются в jre/lib/ext при установке КриптоПро.
В итоге при запуске своего приложения и метода подписания PDF мы получаем ошибку:
Что получается – библиотека iTextpdf_5.1.3 имеет зависимость от более старого провайдера Bouncy Castle, а для новых версий iTextpdf нет патча от КриптоПро.
Конкретно в поставке КриптоПро JCP 2.0 зависимости на новую версию Bouncy Castle имеет библиотека CAdES.jar. Если удалить из JRE эту библиотеку или вовсе отказаться от поддержки формирования CAdES подписей при установке КриптоПро JCP 2.0, то проблема будет решена.
Но что если поддержка CAdES должна остаться?
Чтобы избавиться от конфликта библиотек, необходимо предпринять следующие шаги:
-
заменяем в исходном коде библиотеки iTextpdf_5.1.3_patched_cryptopro зависимость org.bouncycastle 1.46 на версию 1.50.
Исходный код iTextpdf_5.1.3_patched_cryptopro_bc1.50 выложен в GitHub: iTextpdf_5.1.3_patched_cryptopro_bc1.50
Что такое сервис электронной подписи
Генерация ключа сертификата ЭЦП — это обязательное условие для осуществления электронного документооборота. Пользователю надлежит генерировать электронную цифровую подпись на рабочем ПК с использованием специализированных программных средств. Для этого понадобится утилита КриптоПро для ЭЦП. Здесь же есть возможность проверить актуальность действующей ЭЦП. Бесплатный дистрибутив скачивайте на официальном сайте компании КриптоПро.
Сервис электронной подписи устанавливаем следующим образом:
- Переходим на официальный сайт разработчика.
- Находим блок «Услуги».
- Переходим в раздел «Сервис электронной подписи».
- Изучаем возможности сервиса, порядок аутентификации пользователей и схемы обслуживания.
- Регистрируемся или авторизуемся (если регистрация осуществлялась ранее).
- Скачиваем дистрибутив.
- Подписываем виртуальное лицензионное соглашение и устанавливаем дистрибутив на рабочий ПК.
Если вам необходим сертификат на ПК и ключ ЭЦП на съемном носителе, обращайтесь в Удостоверяющий центр и получайте полный набор инструментов для установки.
Что имеем на входе?
КриптоПро CSP версии 5.0 - для поддержки Российских криптографических алгоритмов (подписи, которые выпустили в аккредитованном УЦ в РФ)
КриптоПро TSP Client 2.0 - нужен для штампа времени
КриптоПро OCSP Client 2.0 - проверит не отозван ли сертификат на момент подписания
Любой сервис по проверке ЭП - я использовал Контур.Крипто как основной сервис для проверки ЭП и КриптоАРМ как локальный. А еще можно проверить ЭП на сайте Госуслуг
КЭП по ГОСТ Р 34.11-2012/34.10-2012 256 bit, которую выпустил любой удостоверяющий центр
КриптоПро CSP версии 5.0 - у меня установлена версия 5.0.11944 КС1, лицензия встроена в ЭП.
КриптоПро TSP Client 2.0 и КриптоПро OCSP Client 2.0 - лицензии покупается отдельно, а для гайда мне хватило демонстрационного срока.
Контур.Крипто бесплатен, но требует регистрации. В нем также можно подписать документы КЭП, УКЭП и проверить созданную подпись загрузив ее файлы.
Преимущества PDF
В качестве контейнера для хранения разнообразной информации в дружественном для человека представлении формат PDF по праву завоевал свою популярность. Его получится открыть в любой ОС. Документ PDF может содержать не только текстовые и табличные данные, но и аудио и видеозаписи, инженерную графику, трехмерные модели. Для дополнительной обработки PDF-документов в данный формат включен такой мощный инструмент как поддержка JavaScript для изменения содержимого в формах и полях по наступлению какого-то события или выполнению действия пользователя.
Т.е. инструменты Adobe позволяют визуализировать электронную подпись в документе.
При подписании документа PDF можно задать параметры визуализации, указать номер страницы, размер блока с подписью, имя поля, куда ее поместить, добавить графическое изображение, например, логотип компании, скан собственноручной подписи руководителя и печати организации.
При просмотре таких документов, кроме визуализации в теле документа, программы Acrobat и Adobe Reader отображают вкладку «Подписи» с сопутствующей информацией: значок, показывающий статус проверки подписи, сведения о том, был ли изменен документ, результат проверки сертификата открытого ключа, время последней проверки, страницу и поле, содержащие электронную подпись.
КриптоПро ЭЦП Browser plug-in (версия 1.05.1739)
Особенности данной версии:
- Не сертифицирована, но содержит улучшения и исправления ошибок по сравнению с сертифицированной версией.
- В рамках данной версии осуществляется только исправление ошибок, развитие не осуществляется.
- Не поддерживает работу с алгоритмами ГОСТ Р 34.10/11-2012.
- Для Microsoft Windows совместима с КриптоПро CSP версии 3.6 R2 и выше, для других ОС – с КриптоПро CSP версии 3.9 и выше.
- Компоненты КриптоПро TSP Client 1.5 и КриптоПро OCSP Client 1.5, входящие в данную версию, принимают лицензию от версий 1.0.
- Минимальная поддерживаемая версия Microsoft Windows — Windows 2000.
Загрузить:
Поддерживаемые операционные системы:
- Microsoft Windows;
- Linux;
- Apple iOS;
- Apple MacOS.
КриптоПро ЭЦП Browser plug-in легко встраивается и применим в любом из современных браузеров с поддержкой сценариев JavaScript:
- Internet Explorer;
- Mozilla Firefox;
- Opera;
- Google Chrome;
- Яндекс.Браузер;
- Apple Safari.
КриптоПро ЭЦП Browser plug-in позволяет подписывать различные типы данных:
С точки зрения бизнес-функций, плагин позволяет использовать ЭП:
- на клиентских порталах;
- в системах интернет-банкинга;
- в электронных офисах с доступом через web и т.п.
Например: В онлайн-банке подтверждение операции по переводу средств усовершенствованной электронной цифровой подписью обеспечит гарантию того, что счетом распорядился владелец в конкретный (подтвержденный) момент времени и сертификат ключа подписи на момент совершения транзакции был действителен.
КриптоПро ЭЦП Browser plug-in позволяет создавать и проверять как обычную электронную подпись, так и усовершенствованную электронную подпись. Поскольку плагин является частью стандарта применения усовершенствованной электронной цифровой подписи, автоматически решаются задачи:
- доказательство момента подписи документа и действительности сертификата ключа подписи на этот момент;
- отсутствие необходимости сетевых (онлайн) обращений при проверке подписи;
- архивное хранение электронных документов.
Создание и проверка подписи происходят на стороне пользователя. При создании подписи с помощью КриптоПро ЭЦП Browser plug-in, электронная подпись может быть либо добавлена к подписываемым данным (присоединенная ЭП), либо создана отдельно (отделенная ЭП).
КриптоПро ЭЦП Browser plug-in распространяется бесплатно.
Я построю свой собственный сервис для подписания документов - FOX ©
Это вообще законно?
С удовольствием узнаю ваше мнение в комментариях.
КриптоПро ЭЦП Browser plug-in ( версия 2.0.13292 )
Особенности данной версии:
- Актуальная, развивающаяся версия, находится в процессе сертификации.
- Поддерживает работу с алгоритмами ГОСТ Р 34.10/11-2012 (при использовании с КриптоПро CSP 4.0 и выше).
- Для Microsoft Windows совместима с КриптоПро CSP версии 3.6 R4 и выше, для других ОС – с КриптоПро CSP версии 4.0 и выше.
- Компоненты КриптоПро TSP Client 2.0 и КриптоПро OCSP Client 2.0, входящие в данную версию, не принимают лицензию от версий 1.x.
- Минимальная поддерживаемая версия Microsoft Windows — Windows XP.
Загрузить:
Как получить электронную подпись
Можно использовать простую электронную подпись и без информационной системы. Для этого надо подписать с контрагентом соглашение об обмене документами по электронной почте с использованием такой подписи. В качестве подписи будет использоваться адрес электронной почты и пароль к определенному почтовому ящику.
Пример кода, несколько подписей PDF
Пример использования КриптоПро и iTextpdf_5.1.3_patched_cryptopro_bc1.50 выглядит следующим образом:
Метод принимает на вход список имен контейнеров с ключами электронной подписи, байты PDF-документа и номер версии формата PDF. Согласно указанным именам, ключи и сертификаты извлекаются из кэша. Подгружается изображение для визуализации подписи.
Создается объект с корневым сертификатом для формирования пути сертификации, который требуется методу setCrypto класса com.itextpdf.text.pdf.PdfSignatureAppearance.
В цикле выполняется подпись страниц PDF-документа ключами, имена которых были переданы в метод.
Для демонстрации выполнены две подписи — валидная и невалидная с недействительным сертификатом.
Вкладка «Подписи» выглядит следующим образом:
Что это за программа
Для подписи электронных документов и дальнейшего обмена бланками необходим криптопровайдер. Он шифрует и защищает информацию, хранит секретные ключи — вот что такое КриптоПро. Обычным пользователям, таким как заказчики и поставщики, понадобится КриптоПро CSP. Вот для чего вам необходимо это ПО:
- для формирования ключа ЭЦП и его проверки;
- для шифрования информационных данных и обеспечения полной конфиденциальности при их передаче;
- для поддержания аутентичности работы некоторых соединений и протоколов;
- для контроля целостности программного обеспечения персонального компьютера;
- для защиты от внешних проникновений и несанкционированных изменений в пользовательскую информацию.
Для работы с государственными информационными системами (ЕИС, Электронный бюджет, сайт ГМУ) используют ПО КриптоПро CSP версии не ниже 4.0. Недавно разработчики представили улучшенную версию 5.0, которая обладает тем же функционалом, но с расширенными возможностями: новые платформы использования, ускоренное действие, удобный интерфейс.
Если пользователю необходимо ПО без функций генерации закрытых ключей, подписания и расшифровки данных, то возможна бесплатная установка. Во всех остальных случаях придется приобретать полную лицензионную версию (вводить серийный номер) у официального разработчика. Изучите актуальные цены на программные продукты.
Ссылки на публичные источники
UPD1: Поменял в коде переменную, куда записываются байты файла подписи.
Также я забыл написать немного про подпись штампа времени - он подписывается сертификатом владельца TSP-сервиса. По гайду это ООО "КРИПТО-ПРО":
UPD2: Про библиотеки CAdESCOM и CAPICOM
Но при использовании пропатченных библиотек это исключение не выпадает и с приватным ключем можно взаимодействовать:
Также код из гайда работает с .NET Framework 4.8 без использования пропатченных библиотек, но вместо обращения к пространству имен "System.Security.Cryptography", которое подменяется пропатченными библиотеками для .NET Core, CSP Gost3410_2012_256CryptoServiceProvider будет использован из пространства имен "CryptoPro.Sharpei":
Привет! Я сотрудник Альфа-Банка и занимаюсь разработкой программного обеспечения со встроенными средствами криптографической защиты информации.
В данной статье хочу рассказать о следующих вещах:
- преимуществах формата PDF в качестве документа с электронной подписью;
- платформе Java, библиотеке itextpdf и СКЗИ КриптоПро CSP, как инструментах подписи;
- о том, с какими трудностями пришлось столкнуться, о доработке itextpdf;
- привести пример кода, выполняющего несколько подписей;
- поговорить о целесообразности использования формата PDF в качестве документа с подписью.
Согласно законодательству, электронная подпись может придать документам юридическую силу, равную по значимости бумажному носителю, подписанному собственноручной подписью и скрепленного печатью правомочного лица.
Первым делом создадим новую папку
. и положим туда все необходимое.
Инструкция делится на 2 этапа - мне пришлось выполнить оба, чтобы решение заработало. В папку добавьте подпапки .\runtime и .\packages
I - Сборка проекта без сборки corefx для Windows
Установите КриптоПро 5.0 и убедитесь, что у вас есть действующая лицензия. - для меня подошла втроенная в ЭП;
Установите core 3.1 sdk и runtime и распространяемый пакет Visual C++ для Visual Studio 2015 обычно ставится вместе со студией; прим.: на II этапе мне пришлось через установщик студии поставить дополнительное ПО для разработки на C++ - сборщик требует предустановленный DIA SDK.
Задайте переменной среды DOTNET_MULTILEVEL_LOOKUP значение 0 - не могу сказать для чего это нужно, но в оригинальной инструкции это есть;
Скачайте 2 файла из релиза corefx (package_windows_debug.zip и runtime-debug-windows.zip) - они нужны для корректной сборки проекта. В гайде рассматривается версия v3.1.1-cprocsp-preview4.325 от 04.02.2021:
package_windows_debug.zip распакуйте в .\packages
runtime-debug-windows.zip распакуйте в .\runtime
Добавьте источник пакетов NuGet в файле %appdata%\NuGet\NuGet.Config - источник должен ссылаться на путь .\packages в созданной вами папке. Пример по добавлению источника есть в основной инструкеии. Для меня это не сработало, поэтому я добавил источник через VS Community;
Склонируйте NetStandard.Library в .\ и выполните PowerShell скрипт (взят из основной инструкции), чтобы заменить пакеты в $env:userprofile\.nuget\packages\
Измените файл .\DotnetSampleProject\DotnetSampleProject.csproj - для сборок System.Security.Cryptography.Pkcs.dll и System.Security.Cryptography.Xml.dll укажите полные пути к .\runtime;
Перейдите в папку проекта и попробуйте собрать решение. Я собирал через Visual Studio после открытия проекта.
II - Сборка проекта со сборкой corefx для Windows
Выполните 1-3 и 6-й шаги из I этапа;
Склонируйте репозиторий corefx в .\
Выполните сборку запустив .\corefx\build.cmd - на этом этапе потребуется предустановленный DIA SDK
Выполните шаги 5, 7-9 из I этапа. Вместо условного пути .\packages укажите .\corefx\artifacts\packages\Debug\NonShipping, а вместо .\runtime укажите .\corefx\artifacts\bin\runtime\netcoreapp-Windows_NT-Debug-x64
На этом месте у вас должно получиться решение, которое поддерживает ГОСТ Р 34.11-2012 256 bit.
Немного покодим
Потребуется 2 COM библиотеки: "CAPICOM v2.1 Type Library" и "Crypto-Pro CAdES 1.0 Type Library". Они содержат необходимые объекты для создания УКЭП.
В этом примере будет подписываться BASE64 строка, содержащая в себе PDF-файл. Немного доработав код можно будет подписать hash-значение этого фала.
Условно процесс можно поделить на 4 этапа:
Поиск сертификата в хранилище - я использовал поиск по отпечатку в хранилище пользователя;
Чтение байтов подписанного файла;
Сохранение файла подписи рядом с файлом.
Читайте также: