- Введение.
- Базовая последовательность шагов по настройке (обязательные)
- Опциональные настройки:
- Пример настройки КриптоПро SVS
- Вопросы и ответы
- Системные требования
- Features
- Особенности некоторых браузеров по настройке работы плагина
- Теоритическая часть.
- Реализация взаимодействия с КриптоПро CSP на C.
- Загрузка сертификата в хранилище.
- Загрузка файла отозванных сертификатов.
- Постороение цепочки сертификата.
- Прверка подписи.
- Implementation of CryptoPro CSP
- Implementation at the Crypto API 2. 0 Level
- Implementation at the CSP Level
- Using Com Interfaces
- Certificate Enrollment Control
- CAPICOM 2
- Certificate Services
- Using TLS Protocol in Application Software
- Sample Applications of Cryptographic Security Tools
- Certificates
- Integration
- Portability
- Заключение.
Введение.
В одной из поддерживаемых мной систем цифровая подпись сообщений проверялась с помощью КриптоПро CSP и библиотека отвечающая за это функцию периодически падала с ошибкой. Библиотека эта писалась в спешке и не мной, поэтому я решил переделать ее “по-человечески” и оформить в виде python модуля. Ниже я опишу процесс разработки и опишу с какими трудностями я столкнулся.
Dmitriy PRO Оставлено | |
Добрый день, коллеги! Необходимо подписать закрытым ключом ЭП Партнера текст запроса в формате CMS/PKCS#7 в DER кодировке. | |
Андрей * Оставлено | |
Здравствуйте. Установите КриптоПро .NET SDK – там есть примеры. \Program Files (x86)\Crypto Pro\.NET SDK\Examples\ | |
Dmitriy PRO Оставлено | |
Спасибо, все получилось! В итоге сам КриптоПро .NET не понадобился | |
rafaelkhasanov Оставлено | |
Хочу проверить подпись, пришедшую от ЕСИА. Вывод: На винде все ок | |
Александр Лавник Оставлено | |
Автор: rafaelkhasanov Хочу проверить подпись, пришедшую от ЕСИА. Вывод: На винде все ок Здравствуйте. Попробуйте доустановить пакет cprocsp-rsa-64-5.0.11455-5.x86_64.rpm из состава дистрибутива КриптоПро CSP 5.0.11455 и повторить проверку. | |
rafaelkhasanov Оставлено | |
2021-10-20_01-35-13.png (239kb) загружен 5 раз(а). | |
rafaelkhasanov Оставлено | |
Проверил сейчас через гостовский тестовый сертификат (предварительно изменив настройки в тех кабинете ЕСИА, чтобы изменился алгоритм), все ок, проверяет успешно, а вот SHA256 не хочет. | |
Александр Лавник Оставлено | |
Автор: rafaelkhasanov Проверил сейчас через гостовский тестовый сертификат (предварительно изменив настройки в тех кабинете ЕСИА, чтобы изменился алгоритм), все ок, проверяет успешно, а вот SHA256 не хочет. Здравствуйте. Если есть возможность, то приложите (или пришлите ссылку через ЛС) файла, с которым возникает ошибка при проверке подписи. | |
vicmosin Оставлено | |
Доброго времени суток, Заранее спасибо. | |
TolikTipaTut1 Оставлено | |
Добрый. Да, проверить можно. | |
vicmosin Оставлено | |
Автор: TolikTipaTut1 Добрый. Да, проверить можно. Есть какие-то примеры где можно почерпнуть? )) | |
TolikTipaTut1 Оставлено | |
https://github.com/anato…0using%20BouncyCastle.cs Тут на C#, но на Java переписать, думаю, несложно будет. Важно! В примере, представленном выше, проверяется математическая корректность ЭП. Квалифицированность цепочки, ровно как построение цепочки сертов до корневого, загрузка crl, обработка Ocsp и т.д. в примере нет Отредактировано пользователем 17 февраля 2022 г. 12:32:37(UTC) | |
1 пользователь поблагодарил TolikTipaTut1 за этот пост. | |
vicmosin Оставлено | |
Автор: TolikTipaTut1 https://github.com/anatolkavassermann/BounyCastle-and-OpenSSL-crypto/blob/main/Different%20samples%20using%20BouncyCastle.cs Тут на C#, но на Java переписать, думаю, несложно будет. Важно! В примере, представленном выше, проверяется математическая корректность ЭП. Квалифицированность цепочки, ровно как построение цепочки сертов до корневого, загрузка crl, обработка Ocsp и т.д. в примере нет Спасибо! > Квалифицированность цепочки, ровно как построение цепочки сертов до корневого, загрузка crl, обработка Ocsp и т.д. в примере нет Это я так понимаю уже часть JCP? | |
TolikTipaTut1 Оставлено | |
Автор: vicmosin Автор: TolikTipaTut1 https://github.com/anatolkavassermann/BounyCastle-and-OpenSSL-crypto/blob/main/Different%20samples%20using%20BouncyCastle.cs Тут на C#, но на Java переписать, думаю, несложно будет. Важно! В примере, представленном выше, проверяется математическая корректность ЭП. Квалифицированность цепочки, ровно как построение цепочки сертов до корневого, загрузка crl, обработка Ocsp и т.д. в примере нет Спасибо! > Квалифицированность цепочки, ровно как построение цепочки сертов до корневого, загрузка crl, обработка Ocsp и т.д. в примере нет Это я так понимаю уже часть JCP? Нет, придётся писать самостоятельно с использованием BouncyCastle | |
Санчир Момолдаев Оставлено | |
Добрый день! | |
TolikTipaTut1 Оставлено | |
Автор: Санчир Момолдаев Добрый день! + | |
vicmosin Оставлено | |
Автор: Санчир Момолдаев Добрый день! Именно. Отредактировано пользователем 17 февраля 2022 г. 13:53:19(UTC) | |
Санчир Момолдаев Оставлено | |
Автор: vicmosin Автор: Санчир Момолдаев Добрый день! Именно. да | |
1 пользователь поблагодарил Санчир Момолдаев за этот пост. | |
squadgazzz Оставлено | |
Здравствуйте! Подскажите, с помощью JCSP на алгоритмах GOST28147 и GOST3412_2015_K возможно осуществить потоковое шифрование и последующую верификацию больших файлов без загрузки их целиком в оперативную память? Существуют ли готовые примеры? Отредактировано пользователем 10 сентября 2021 г. 9:44:14(UTC) | |
Евгений Афанасьев Оставлено | |
Здравствуйте. Посмотрите EnvelopedSignature из состава CAdES.jar (описание в javadoc/CAdES-javadoc.jar дистрибутива), примеры в пакете CAdES/enveloped архива samples-sources.jar. В EnvelopedSignature есть потоковое шифрование. | |
1 пользователь поблагодарил Евгений Афанасьев за этот пост. | |
Алексей Н. Оставлено | |
Здравствуйте! Использую JCP jcp-2.0.41940-A, требуется реализовать шифрование с помощью алгоритма GOST3412_2015_M, но его нет в списке доступных Цитата: – JCP – =========== CryptoPro Java Provider =========== Однако в продукте он указан https://www.cryptopro.ru/products/csp/jcp | |
КриптоПро JCP – средство криптографической защиты информации, реализующее российские криптографические стандарты, разработанное в соответствии со спецификацией JCA (Java Cryptography Architecture).
Интеграция КриптоПро JCP с архитектурой Java позволяет использовать стандартные процедуры, такие как создание и проверка ЭЦП (в том числе XMLdsig, CAdES, XAdES) , шифрование, генерацию ключей, вычисление кодов аутентификации (Message Authentication Code – MAC) в JavaTM Cryptography Extension (JCE) в соответствии со спецификациями JavaTM Cryptography Extension (JCE) на различных операционных системах и аппаратных платформах.
Реализация КриптоПро JCP совместима с КриптоПро CSP.
Средство криптографической защиты КриптоПро JCP распространяется в двух комплектациях:
- генерация ключей, формирование и проверка ЭЦП, хэширование данных;
- генерация ключей, формирование и проверка ЭЦП, хэширование данных, шифрование.
Назначение:
КриптоПро JCP предназначен для:
- авторизации и обеспечения юридической значимости электронных документов при обмене ими между пользователями, посредством использования процедур формирования и проверки электронной цифровой подписи (ЭЦП) в соответствии с отечественными стандартами ГОСТ Р 34.11-94/ГОСТ Р 34.11-2012 и ГОСТ Р 34.10-2001/ГОСТ Р 34.10-2012;
- обеспечения конфиденциальности и контроля целостности информации посредством ее шифрования и имитозащиты, в соответствии с ГОСТ 28147-89 и ГОСТ 34.12-2015;
- обеспечение аутентичности, конфиденциальности и имитозащиты соединений TLS;
- контроля целостности, системного и прикладного программного обеспечения для его защиты от несанкционированного изменения или от нарушения правильности функционирования;
- управления ключевыми элементами системы в соответствии с регламентом средств защиты.
Реализуемые алгоритмы:
Алгоритм выработки значения хэш-функции реализован в соответствии с требованиями ГОСТ Р 34.11 94 “Информационная технология. Криптографическая защита информации. Функция хэширования” и ГОСТ Р 34.11 2012 “Информационная технология. Криптографическая защита информации. Функция хэширования”.
Алгоритмы формирования и проверки ЭЦП реализованы в соответствии с требованиями:
- ГОСТ Р 34.10-2001 “Информационная технология. Криптографическая защита информации. Процессы формирования и проверки электронной цифровой подписи”;
- ГОСТ Р 34.10-2012 “Информационная технология. Криптографическая защита информации. Процессы формирования и проверки электронной цифровой подписи”.
Алгоритм зашифрования/расшифрования данных и вычисление имитовставки реализованы в соответствии с требованиями ГОСТ 28147-89 “Системы обработки информации. Защита криптографическая” и ГОСТ 34.12-2015 “Информационная технология. Криптографическая защита информации”.
При генерации закрытых и открытых ключей обеспечена возможность генерации с различными параметрами в соответствии с ГОСТ Р 34.10-2001/ГОСТ Р 34.10-2012.
При выработке значения хэш-функции и шифровании обеспечена возможность использования различных узлов замены в соответствии с ГОСТ Р 34.11-94/ГОСТ Р 34.11-2012 и ГОСТ 28147-89.
Системные требования:
КриптоПро JCP функционирует в следующем окружении:
- виртуальной машина, удовлетворяющая спецификации Java 7 ™ Virtual Machine;
- требуется Java 7 Runtime Environment версии 7 и выше;
Основные характеристики:
Длина ключей электронной цифровой подписи (ГОСТ Р 34.10-2001):
- закрытый ключ – 256 бит;
- открытый ключ – 512 бит при использовании алгоритма ГОСТ Р 34.10-2001;
Длина ключей электронной цифровой подписи (ГОСТ Р 34.10-2012, 256 бит):
- закрытый ключ – 256 бит;
- открытый ключ – 512 бит при использовании алгоритма ГОСТ Р 34.10-2012, 256 бит;
Длина ключей электронной цифровой подписи (ГОСТ Р 34.10-2012, 512 бит):
- закрытый ключ – 512 бит;
- открытый ключ – 1024 бит при использовании алгоритма ГОСТ Р 34.10-2012, 512 бит;
Длина ключей, используемых при шифровании:
- закрытый ключ – 256 бит на базе алгоритма ГОСТ Р 34.10-2001;
- закрытый ключ – 256 бит на базе алгоритма ГОСТ Р 34.10-2012, 256 бит;
- закрытый ключ – 512 бит на базе алгоритма ГОСТ Р 34.10-2012, 512 бит;
- открытый ключ – 512 бит на базе алгоритма ГОСТ Р 34.10-2001;
- открытый ключ – 512 бит на базе алгоритма ГОСТ Р 34.10-2012, 256 бит;
- открытый ключ – 1024 бит на базе алгоритма ГОСТ Р 34.10-2012, 512 бит;
- симметричный ключ – 256 бит;
Типы ключевых носителей:
- дискеты 3,5″;
- сменные носители с интерфейсом USB;
- российские интеллектуальные карты (Оскар) с использованием считывателей смарт-карт, поддерживающих интерфейс OpenCard Framework (в том числе протокол PC/SC для Windows): GemPC Twin, Towitoko, Oberthur OCR126 и др.);
- электронные ключи и смарт-карты eToken;
- электронные ключи Rutoken;
- смарт-карты ESMART;
- директория жесткого диска.
Преимущества:
Сравнение версий JCP | JCP | JCP 2.0 |
---|---|---|
ГОСТ Р 34.10-2012 | 512 / 1024 бит | |
ГОСТ Р 34.10-2001 | 512 бит | 512 бит |
ГОСТ Р 34.10-94 | 1024 бит | |
ГОСТ Р 34.11-2012 | 256 / 512 бит | |
ГОСТ Р 34.11-94 | 256 бит | 256 бит |
ГОСТ 28147-89 | 256 бит | 256 бит |
ГОСТ 34.12-2015 | 256 бит | |
Поддержка новых алгоритмов в JTLS | – | + |
Контроль сроков действия ключа | – | + |
Поддержка CAdES/XAdES-подписи | – | + |
- Страница для печати
Сегодняшнюю небольшую запись я решил посветить теме создания электронной цифровой подписи средствами криптопровайдера «КриптоПРО». Речь пойдет о Bat файле, который можно будет использовать для автоматизации подписи электронных документов.
Для того что бы автоматизировать процесс подписывания электронных документов нам понадобится:
1) Крипто-ПРО CSP;
2) USB Ключ (например рутокен), вставленный в USB порт;
3) Блокнот (Notepad.exe);
4) Установленные сертификаты для Вашего ключа;
Камнем преткновения во всей этой истории является файл csptest.exe который находится в директории КриптоПро (по умолчанию C:\Program Files\Crypto Pro\CSP\csptest.exe).
Откроем командную строку и выполним команду:
cd C:\Program Files\Crypto Pro\CSP\ и csptest
Мы увидим все возможные параметры данного exe файла.
select [global options] from: -help print this help -noerrorwait do not wait for any key on error -notime do not show time elapsed -pause Wait for keyboard input after completion so that you may check memory and other resources usage -reboot Call DestroyCSProvider() of last used CSP at exit Services (cryptsrv*, HSM, etc) not affected -randinit <x> Initialize system rng with srand(x) (default: time) -showrandinit Show system rng initialization value -stack Measure stack usage select [mode] from: -lowenc low level encryption/decryption test -sfenc simplified level message encryption/decryption test -cmslowsign CMS low level message signing test -cmssfsign CMS simplified level message signing/verifying test -lowsign low level message signing test -lowsignc low level message signing test with cycle Use '-lowsign -repeat NN' instead! -sfsign simplified level message signing/verifying test -ipsec ipsec tests -defprov default provider manipulations -testpack Pack of several tests -property certificate obtain/install property for secret key linking -certkey change provider name in certificate secret key link -context provider context tests -absorb absorbs all certs from containers with secret key linking -drvtst proxy-driver test -signtool SDK signtool analog -iis manage IIS -hsm manage HSM-client -rpcc RPC over SSL client -rpcs RPC over SSL server -oid oid info/set/get -passwd set/change password -keycopy copy container -keyset create (open) keyset -tlss start tls server -tlsc start tls client -tls TLS tests -prf PRF tests -hash hash test -makecert certificate issuing test -certprop show certificate properties -rc verify pkcs#10/certificate signature -cmsenclow CMS low level message encryption/decryption test -sfse simplified level message SignedAndEnveloped test -stress stress test for Acquire/ReleaseContext -ep public key export test -enum CSP parameters enumeration -cpenc CP/Crypto level (advapi32) encryption tests -setpp SetProvParam tests -perf Performance tests -speed Speed tests and optimal function mask setting -testcont Install/Uninstall test containers -install CSP installation information, clearing out CSP -version Print CSP version
Для того, что бы увидеть параметры той или иной глобальной опции, достаточно вызвать данный файл с этой опцией, например
csptest -sfsign
выдаст
<commands>: -sign Sign data from input filename -verify Verify signature on data specified by input filename -help Print this help <options>: -in <file> Input filename to be signed or verified -out <file> Output PKCS#7 filename -my <DName> Cert from CURRENT_USER store to process data -MY <DName> Cert from LOCAL_MACHINE store to process data -detached Deal with detached signature -add Add sender certificate to PKCS#7 -signature <file> Detached signature file -alg Hash algorithm: SHA1, MD5, MD2, GOST - default -ask Acquire csp context using my cert (default: none) -base64 Input/output with base64<->DER conversion -addsigtime Add signing time attribute -cades_strict Strict signingCertificateV2 attribute generation -cades_disable Disable signingCertificateV2 attribute generation
Таким образом, чтобы подписать файл через cmd средствами csptest.exe нужно вызвать команду:
csptest -sfsign -sign -in Dogovor.doc -out Dogovor.doc.sig -my ООО МоиПрограммы Иванов Иван Иванович
где:
-my — Указывает владельца ключа;
-in — Указывает какой файл нужно подписывать. Если файл находится не в папке с csptest то нужно указывать полный путь.;
-out — Указывает имя файла подписи;
Проверить подпись можно на сайте Госулсуг по данной ссылке.
Скорей всего. Если сейчас загрузить данный файл на сайте госуслуги, то появится ошибка. Вызвано это тем, что необходима информация об удостоверяющем центре. Так же не будет лишней дата и время подписи документов. Для этого к нашей команде нужно добавить два параметра:
csptest -sfsign -sign -in Dogovor.doc -out Dogovor.doc.sig -my ООО МоиПрограммы Иванов Иван Иванович -addsigtime -add
Если же нам нужна подпись в осоединенном формате, то добавим еще один параметр:
csptest -sfsign -sign -in Dogovor.doc -out Dogovor.doc.sig -my ООО МоиПрограммы Иванов Иван Иванович -addsigtime -add -detached
Примечание:Если подпись документа выполняется с ошибкой
Unable to open file
An error occurred in running the program.
.\signtsf.c:321:Cannot open input file.
Error number 0x2 (2).
Не удается найти указанный файл.
при вызове, как в последнем примере, и Вы уверены в правильности путей в параметре -in и -out, попробуйте создать подпись по первому примеру, а после выполнить команду с полным набором параметров!!!
Основную команду для подписи мы получили. Теперь немного упростим процедуру. Сделаем bat файл, при запуске которого будет подписывать файл Secret.txt, находящийся в тойже папке что и bat файл. Откроем блокнот и запишем слудующий код:
chcp 1251 set CurPath=%cd% cd C:\Program Files\Crypto Pro\CSP call csptest -sfsign -sign -in %CurPath%\Secret.txt -out %CurPath%\Secret.txt.sig -my ООО МоиПрограммы Иванов Иван Иванович -addsigtime -add -detached cd %CurPath%
Нажимаем «Файл» -> «Сохранить как» -> ЗадаемИмя с .bat -> «Сохранить»
Собсвенно и все. Для справки:
chcp 1251 — Задает кодировку для CMD. Необходимо для валидной обработки русских букв в коде;
set CurPath=%cd% — Сохраняет путь текущей директории CMD в переменную CurPath;
cd — Задает текущий путь CMD;
call — Запускает программу;
Данный раздел определяет последовательность действий при разворачивании и настройке
экземпляра Сервиса Проверки Подписи (КриптоПро SVS).
После завершения выполнения действий, описанных в данном разделе, веб-интерфейс Сервиса Проверки
Подписи будет доступен по следующему адресу:
Программный интерфейс Сервиса Проверки Подписи будет доступен по следующему адресу:
Примечание
Базовая последовательность шагов по настройке (обязательные)
1. Создание экземпляра службы.
New-VsInstance -DisplayName SVS -ApplicationName verify -SiteName "Default Web Site"
2. Ввод лицензии.
New-VsLicense [–DisplayName <string>] [–SN <string>] [-CompanyName <string>]
Примечание
При вызове команды без параметров активируется временная лицензия на 3 месяца.
Примечание
Вызов командлета необходим при создании каждого нового экземпляра Сервиса Проверки
Подписи.
3. Установка корневых сертификатов и CRL.
При разворачивании экземпляра Сервиса Проверки Подписи автоматически будут созданы хранилища сертификатов с именами
-TSL и -Ca, где – имя веб-приложения,
указанное в командлете New-VsInstance в параметре -ApplicationName.
4. Настройка привязок веб-сервера IIS.
Disable-VsEndpoint –Name BasicHttps
Подробнее о передаче данных по безопасному соединению:
Опциональные настройки:
<!–
Веб-интерфейс Сервиса Проверки Подписи можно интегрировать в Веб-интерфейс КриптоПро DSS. Для добавления
страниц проверки подписи и сертификата в Веб-интерфейс подписи необходимо задать адрес Сервиса Проверки Подписи через
командлет [Set-DssFeProperties](../../../adminguide/frontend/cmdlets/Set-DssFeProperties.md).
Пример команды:
“`PowerShell
Set-DssFeProperties –VsAddress http://localhost//rest/api
“`
> [!NOTE]
> Если используется Сервис Проверки Подписи версии ниже, чем 2.0.2636, командлет должен выглядеть примерно следующим
> образом:
> “`PowerShell
> Set-DssFeProperties –VsAddress http://localhost//service.svc
> “`
–>
Дополнительно можно выполнить следующие настройки.
Полный список командлетов администрирования КриптоПро SVS
Пример настройки КриптоПро SVS
# Создание экземпляра SVS
New-VsInstance -DisplayName SVS -ApplicationName verify -SiteName "Default Web Site"
# Ввод временной лицензии на 3 месяца
New-VsLicense
# Установка онлайн-режима проверки статуса сертификатов при помощи службы OCSP
Set-VsProperties -RevocationMode Online
# Ограничение набора форматов подписи, доступных для проверки - отключение проверки необработанной подписи ГОСТ Р 34.10-2012
Set-VsSignatureFormat -Format GOST3410 -IsEnabled 0
# Сопоставление расширений файлов с форматами подписи - установка списка расширений для подписи формата CMS
Set-VsSignatureFormat -Format CMS -Extensions sig, p7b, p7s
# Отображение документов в веб-интерфейсе SVS
Add-VsConverterPlugin -FileExtension pdf -Assembly DSS.DocumentConverter.PdfStub.dll
Add-VsConverterPlugin -FileExtension doc -Assembly DSS.DocumentConverter.Word.dll
Add-VsConverterPlugin -FileExtension dot -Assembly DSS.DocumentConverter.Word.dll
Add-VsConverterPlugin -FileExtension docm -Assembly DSS.DocumentConverter.Word.dll
Add-VsConverterPlugin -FileExtension dotm -Assembly DSS.DocumentConverter.Word.dll
Add-VsConverterPlugin -FileExtension docx -Assembly DSS.DocumentConverter.Word.dll
Add-VsConverterPlugin -FileExtension dotx -Assembly DSS.DocumentConverter.Word.dll
Add-VsConverterPlugin -FileExtension FlatOpc -Assembly DSS.DocumentConverter.Word.dll
Add-VsConverterPlugin -FileExtension FlatOpcMacroEnabled -Assembly DSS.DocumentConverter.Word.dll
Add-VsConverterPlugin -FileExtension FlatOpcTemplate -Assembly DSS.DocumentConverter.Word.dll
Add-VsConverterPlugin –FileExtension FlatOpcTemplateMacroEnabled -Assembly DSS.DocumentConverter.Word.dll
Add-VsConverterPlugin -FileExtension xml -Assembly DSS.DocumentConverter.Word.dll
Add-VsConverterPlugin -FileExtension odt -Assembly DSS.DocumentConverter.Word.dll
Add-VsConverterPlugin -FileExtension ott -Assembly DSS.DocumentConverter.Word.dll
Add-VsConverterPlugin -FileExtension ooxml -Assembly DSS.DocumentConverter.Word.dll
Add-VsConverterPlugin -FileExtension WordML -Assembly DSS.DocumentConverter.Word.dll
Add-VsConverterPlugin -FileExtension rtf -Assembly DSS.DocumentConverter.Word.dll
Add-VsConverterPlugin -FileExtension html -Assembly DSS.DocumentConverter.Word.dll
Add-VsConverterPlugin -FileExtension xhtml -Assembly DSS.DocumentConverter.Word.dll
Add-VsConverterPlugin -FileExtension mhtml -Assembly DSS.DocumentConverter.Word.dll
Add-VsConverterPlugin -FileExtension txt -Assembly DSS.DocumentConverter.Word.dll
# Ограничение размера документов в 10 Мбайт
Set-VsEndpointGlobalSettings -MaxMessageSize 10240
# Настройка проверки формата сертификатов
# Регистрация плагина
Add-VsCertificateVerifierPlugin -Assembly SVS.CertificateVerifier.Qualified.dll
# Добавление отпечатков корневых сертификатов Минцифры РФ
Add-VsQualifiedCAThumbprints -Thumbprint 4bc6dc14d97010c41a26e058ad851f81c842415a
Add-VsQualifiedCAThumbprints -Thumbprint aff05c9e2464941e7ec2ab15c91539360b79aa9d
# Настройка шаблона отчета о пакетной проверке подписи
Set-VsProperties -WordFilePath "C:\Program Files\Crypto Pro\DSS\VerificationService\smp_template.docx"
Set-VsProperties -XsltFilePath "C:\Program Files\Crypto Pro\DSS\VerificationService\smp_xslt.xslt"
Restart-VsInstance
Вопросы и ответы
КриптоПро ЭЦП browser plug-in (он же КриптоПро CADESCOM или Кадеском) – плагин, необходимый для создания и проверки электронной подписи на web-страницах с использованием КриптоПро CSP. Используется для работы на торговых площадках и порталах. Дистрибутив доступен на сайте КриптоПро в разделе Продукты / КриптоПро ЭЦП Browser plug-in http://www.cryptopro.ru/products/cades/plugin/get_2_0.
Системные требования
- Установка плагина возможна на следующих операционных системах: Win XP SP3, Win Vista SP2, Win 2003 SP2, Win 2008 SP2, Win 7, Win 2008 R2, Win 8, Win8.1, Win10.
- Работает с браузерами: IE 8 — 11, Opera, Mozilla Firefox, Google Chrome, Yandex Browser
Не работает в браузере EDGE, предустановленном по умолчанию в Windows 10.
- Требуется предустановленная КриптоПро CSP версии не ниже 3.6 R2
Features
- CryptoPro TLS supports the TLS (SSL) protocol of on all platforms.
- CryptoPro CSP can be used with the Oracle E-Business Suite, Oracle Application Server, Java and Apache applications, via the products of the Crypto-Pro company partners.
- Supports windows domain authentication using smart cards (USB tokens) and X.509 certificates.
- The usage of CryptoPro CSP in email applications, as well as in MS Word and Excel products.
- CryptoPro CSP includes a kernel mode driver for all platforms, which allows for the use of cryptographic functions (encryption/decryption, signing , hashing) in kernel mode applications.
- The private keys can be stored in various type of mediums, such as HDD, smart cards etc.
Особенности некоторых браузеров по настройке работы плагина
- в Mozilla Firefox 29 и выше: необходимо включить работу плагина (браузер может не запросить разрешения на включение плагина). Для этого пройти диагностику и выполнить фикс «Включение плагинов в Mozilla Firefox», после чего обязательно перезапустить Firefox. Также это можно сделать вручную: нажать Ctrl+Shift+A, перейти в раздел «Плагины», выбрать CryptoPro CAdES NPAPI Browser Plug-in и перевести его в состояние «Всегда включать» (Always active), после чего обязательно перезапустить Firefox.
- в Google Chrome необходимо зайти по ссылке и установить расширение.
- В Yandex Browser и Opera нужно установить расширение, доступное по этой ссылке
- В Internet Explorer необходимо сделать следующие настройки:
- Добавить адрес сайта, на котором работаете с плагином, в надёжные узлы (Свойства браузера / безопасность / надёжные сайты / сайты / добавить адрес сайта).
- Если работа ведётся в Internet Explorer 11, то попробовать работу в режиме совместимости.
- Проверить, что адрес сайта добавлен в надёжные узлы плагина (большинство сайтов, принимающих сертификаты нашего УЦ, можно добавить автоматически с помощью диагностики https://help.kontur.ru/uc). Чтобы проверить, что сайт добавлен в надежные узлы плагина, нужно перейти в Пуск — Все программы — КРИПТО-ПРО – Настройки КриптоПро ЭЦП Browser plug-in. Откроется окно браузера, в котором нужно будет позволить разблокировать все содержимое страницы/разрешить доступ.
Была ли полезна информация?
Не нашли ответ?
Задайте вопрос специалисту
Спасибо за ответ
Теоритическая часть.
Для того чтобы проверить подпись какого-то конкретного сообщения на необходимо само сообщение с подписью, а также цепочка сертификатов, которые помогут проверить данную подпись. Подробнее об этом можно узнать в здесь.
Все ключи крипто про хранит в своих хранилищах, таких как root, ca, my. Чтобы в них загрузить сертификат в поставке Криптопро CSP идет специальная утилита certmgr. Синтаксих ее работы таков:
certmgr -inst -store <имя хранилища> -file <файл с сертификатом>
Также для корректной цепочки надо загрузить список отозванных сертификатов. Сделать это можно командой:
certmgr -instl -crl -store <имя хранилища> -file <CRL файл>
Побробную информацию по работе этой утилиты можно получить вызвав:
certmgr -help
Для конкретного сертификата также можно проверить цепочку. Делается это командой:
cryptcp -verify -f <файл сертификата> "text" -errchain
Соответственно закрытым ключок соответсвующем проверяемому сертификату и можем подписать сообщение, а с помощью цепочки сертификатов из хранилища, мы сможем ее проверить.
Из всего вышесказанного я подумал, что в библиотеке мне нужны будут следующие функции:
- Загрузка сертификата в хранилище;
- Загрузка файла отозванных сертификатов;
- Постороение цепочки сертификата;
- Проверка подписи.
Реализация взаимодействия с КриптоПро CSP на C.
Так как КриптоПро CSP(CPCSP) является доработкой CryptoApi от Microsoft, то большая часть примеров из официальной документации подходит идля “КриптоПро”. Чем я собствеено говоря и пользовался при написании модуля, так как с примерами у самого КриптоПро не очень все хорошо.
Загрузка сертификата в хранилище.
Для того, чтобы загрузить сертификат в хранилище нужно выполнить следующие шаги:
- Считать сертификат из файла
- Открыть хранилище сертификатов
- Положить в него сертификат
- Закрыть хранилище
Тут меня ждал первый ньюанс, что в CPCSP нет функции для чтения сертификата из файла, поэтому ее нужно будет написать вручную. Она выглядит следующим образом:
typedef struct CERT {
BYTE *content;
DWORD size;
} CERT;
CERT readFile(char *filename)
{
CERT cert = {NULL, 0};
FILE *fCert;
fCert = fopen(filename, "r");
if (fCert)
{
fseek(fCert, 0, SEEK_END);
cert.size = ftell(fCert);
rewind(fCert);
cert.content = (unsigned char *)malloc(cert.size * sizeof(unsigned char));
fread(cert.content, cert.size, 1, fCert);
}
else
{
perror("Error open certificate file");
}
fclose(fCert);
return cert;
}
PCCERT_CONTEXT ReadCertificateFromFile(char *filename)
{
CERT fileCert;
PCCERT_CONTEXT cert = NULL;
fileCert = readFile(filename);
cert = CertCreateCertificateContext(
X509_ASN_ENCODING,
fileCert.content,
fileCert.size
);
if (!(cert))
{
perror("Error create cert");
}
return cert;
}
В коде выше файл считывается специальную структуру CERT, которая содержит размер и содержимое сертификата. Затем на основе этой информации формируется структура PCCERT_CONTEXT, которая в дальнейшем будет загружаться в хранилище CPCSP.
Далее в описании функций будут использоваться следующие коды ошибок:
# define OPERATION_SUCCESS 0
# define OPEN_STORE_ERROR 1
# define ADD_CERT_TO_STORE_ERROR 2
# define CLOSE_STORE_ERROR 3
# define ADD_CRL_TO_STORE_ERROR 4
# define STR_TO_BIN_LEN_ERROR 5
# define STR_TO_BIN_CONTENT_ERROR 6
# define VERIFY_MSG_SIGNATURE 7
# define GET_CERT_CHAIN_ERROR 8
# define READ_CERT_ERROR 9
# define READ_CRL_ERROR 10
Функция загрузки сертификата в хранилище будет выглядеть следующим образом:
int LoadCertificateToSystemStore(char *cert_file_path, char *store_name)
{
HCERTSTORE cpcsp_cert_store = NULL;
PCCERT_CONTEXT cert_context;
cert_context = ReadCertificateFromFile(cert_file_path);
if (!cert_context)
return READ_CERT_ERROR;
cpcsp_cert_store = CertOpenSystemStore(0, store_name);
if (!cpcsp_cert_store)
return OPEN_STORE_ERROR;
if (!CertAddCertificateContextToStore(
cpcsp_cert_store,
cert_context,
CERT_STORE_ADD_REPLACE_EXISTING,
NULL))
return ADD_CERT_TO_STORE_ERROR;
if (!CertCloseStore(cpcsp_cert_store, 0))
return CLOSE_STORE_ERROR;
if (cert_context)
CertFreeCertificateContext(cert_context);
return OPERATION_SUCCESS;
}
В этой функции считывается файл сертификата (функция ReadCertificateFromFile), затем открываем системное хранилище методом CertOpenSystemStore. Если системное хранилище открылось успешно, то с помощью метода CertAddCertificateContextToStore, сертификат загрузается в хранилище. И в заключении хранилище закрывается функцией CertCloseStore.
Нужно отметить что функция CertOpenSystemStore ипользуется только для чтения системных хранилищ (root, ca, my), для остальных надо использовать CertOpenStore.
Загрузка файла отозванных сертификатов.
Функции чтения списка отозванных сертификатов(CRL) и загрузки их в хранилище идентичны функциям работы с сертификатами, за тем исключением, что для их чтения и загрузки используются функции CPCSP c CRL вместо Certificate в названии функции. Например CertAddCertificateContextToStore будет выглядеть как CertAddCRLContextToStore.
Таким образом код для загруки CRL будет таким:
int LoadCRLToSystemStore(char *cert_file_path, char *store_name)
{
HCERTSTORE cpcsp_cert_store = NULL;
PCCRL_CONTEXT crl_context;
crl_context = ReadCRLFromFile(cert_file_path);
if (!crl_context)
return READ_CRL_ERROR;
cpcsp_cert_store = CertOpenSystemStore(0, store_name);
if (!cpcsp_cert_store)
return OPEN_STORE_ERROR;
if (!CertAddCRLContextToStore(
cpcsp_cert_store,
crl_context,
CERT_STORE_ADD_REPLACE_EXISTING,
NULL))
return ADD_CRL_TO_STORE_ERROR;
if (!CertCloseStore(cpcsp_cert_store, 0))
return CLOSE_STORE_ERROR;
if (crl_context)
CertFreeCRLContext(crl_context);
return OPERATION_SUCCESS;
}
Постороение цепочки сертификата.
Код функции проверки цепочки сертификатов выглядит следующим образом
int VerifyCertChain(char *certFilePath)
{
PCCERT_CONTEXT pCertContext;
PCCERT_CHAIN_CONTEXT pChainContext;
CERT_ENHKEY_USAGE EnhkeyUsage;
CERT_USAGE_MATCH CertUsage;
CERT_CHAIN_PARA ChainPara;
/*
инициализация парметров поиска и сопоставления, которые
будут использоваться для построения цепочки сертификатов
*/
EnhkeyUsage.cUsageIdentifier = 0;
EnhkeyUsage.rgpszUsageIdentifier = NULL;
CertUsage.dwType = USAGE_MATCH_TYPE_AND;
CertUsage.Usage = EnhkeyUsage;
ChainPara.cbSize = sizeof(CERT_CHAIN_PARA);
ChainPara.RequestedUsage=CertUsage;
pCertContext = ReadCertificateFromFile(certFilePath);
if (!CertGetCertificateChain(
NULL,
pCertContext,
NULL,
NULL,
&ChainPara,
0,
NULL,
&pChainContext))
{
perror("The chain could not be created");
}
int result = pChainContext->TrustStatus.dwErrorStatus;
if (pChainContext)
{
CertFreeCertificateChain(pChainContext);
}
return result;
}
Помимо настроек цепочки, тут вызывается функция CertGetCertificateChain, которая формирует собственно цепочку сертификатов и записывает ее в структуру PCCERT_CHAIN_CONTEXT. В данной структуре поле TrustStatus отвечает за статус опреации, если цепочка построена корректно, то dwErrorStatus будет 0, иначе будет записан код ошибки.
Прверка подписи.
Для начала я подумал сорфировать самоподписной сертификат для проверки функционирования функции, но оказалось, что CPCSP не поддерживает их, поэтому я создал сертификат в Тестовом УЦ КриптоПро. Я не буду описывать данный процесс, так как к библиотике он имеет посредственное отношение. Только скажу, что файл подписи я генерировал под Windows, потому как это было проще сделать через КриптоПро ЭЦП Browser plug-in.
Также надо отметить, что сертификат ЦС, надо загрузить в хранилище “Доверенные корневые…”. Иначе сгенерированный тестовый сертификат не установиться и плагин для ЭЦП не будет корректно работать. Код функции проверки подписи приведен ниже:
int VerifySignedMessage(char *signature)
{
DWORD blob_size = 0;
/*
определяем размер выходного der блоба
для подписанного сообщения
*/
if (!CryptStringToBinaryA(
signature,
strlen(signature),
CRYPT_STRING_BASE64,
NULL,
&blob_size,
NULL,
NULL))
return STR_TO_BIN_LEN_ERROR;
/*
заполняем блоб подписанного сообщения
*/
BYTE *msg_blob;
msg_blob = (BYTE *)malloc(blob_size);
if (!CryptStringToBinaryA(
signature,
strlen(signature),
CRYPT_STRING_BASE64,
msg_blob,
&blob_size,
NULL,
NULL))
return STR_TO_BIN_CONTENT_ERROR;
/*
выполняем проверку подписи
*/
CRYPT_VERIFY_MESSAGE_PARA verify_params;
verify_params.cbSize = sizeof(CRYPT_VERIFY_MESSAGE_PARA);
verify_params.dwMsgAndCertEncodingType = ENCODING_TYPE;
verify_params.hCryptProv = 0;
verify_params.pfnGetSignerCertificate = NULL;
verify_params.pvGetArg = NULL;
if(!CryptVerifyMessageSignature(
&verify_params,
0,
msg_blob,
blob_size,
NULL,
NULL,
NULL))
return VERIFY_MSG_SIGNATURE;
return OPERATION_SUCCESS;
}
Код снабжен коментариями, которые поясняют за что какой кусок кода отвечает.
Также надо отметить что функция CryptStringToBinaryA вызывается 2 раза, первый для получения размер подписи, а второй, чтобы получить данные раскодированные из base64 данные. Ну и затем подпись соответственно проверяется.
После того, как все функции написаны, то можно приступуть к реализации С обертки для python библиотеки и написанию тестов.
Для начала опишем заголовочный файл, который будет содержать описание вызываемых функций и исключений:
#ifdef __linux__
#include <Python.h>
#elif __APPLE__
#include <Python/Python.h>
#endif
#ifndef LIBSIGNATURE_H_
#define LIBSIGNATURE_H_
/*
Список экспортируемых функций
*/
PyObject * PyLoadCertificate(PyObject *self, PyObject *args);
PyObject * PyLoadCRL(PyObject *self, PyObject *args);
PyObject * PyVerifyCertChain(PyObject *self, PyObject *args);
PyObject * PyVerifySignedMessage(PyObject *self, PyObject *args);
/*
Типы исключений различных ситуаций
*/
extern PyObject *PyOpenStoreError;
extern PyObject *PyAddCertToStoreError;
extern PyObject *PyCloseStoreError;
extern PyObject *PyAddCrlToStoreError;
extern PyObject *PyStrToBinLenError;
extern PyObject *PyStrToBinContentError;
extern PyObject *PyVerifyMsgSignatureError;
extern PyObject *PyGetCertChainError;
extern PyObject *PyReadCertError;
extern PyObject *PyReadCrlError;
#endif
Как видно из этого файла, на каждый код ошибки С функций, будет соответствовать свое исключение. Реализацию самих функций можно посмотреть в файле py_cpcsp.c репозитория.
Код оберки для библиотеки выглядит следующим образом:
#include <stdio.h>
#include "libsignature.h"
// Таблица методов реализуемых расширением
// название, функция, параметры, описание
static PyMethodDef LibsignatueMethods[] = {
{"load_certificate", PyLoadCertificate, METH_VARARGS, NULL},
{"load_crl", PyLoadCRL, METH_VARARGS, NULL},
{"verify_chain_certificate", PyVerifyCertChain, METH_VARARGS, NULL},
{"vefigy_signature", PyVerifySignedMessage, METH_VARARGS, NULL},
{NULL, NULL, 0, NULL}
};
PyObject *PyOpenStoreError;
PyObject *PyAddCertToStoreError;
PyObject *PyCloseStoreError;
PyObject *PyAddCrlToStoreError;
PyObject *PyStrToBinLenError;
PyObject *PyStrToBinContentError;
PyObject *PyVerifyMsgSignatureError;
PyObject *PyGetCertChainError;
PyObject *PyReadCertError;
PyObject *PyReadCrlError;
// Инициализация
PyMODINIT_FUNC initlibsignature(void)
{
PyObject *m;
// Инизиализруем модуль libsignature
m = Py_InitModule("libsignature", LibsignatueMethods);
if (m == NULL)
return;
// Создание исключений при работе с расширением
PyOpenStoreError = PyErr_NewException("libsignature.OpenStoreError",
NULL,
NULL
);
PyAddCertToStoreError = PyErr_NewException(
"libsignature.AddCertToStoreError",
NULL,
NULL
);
PyCloseStoreError = PyErr_NewException(
"libsignature.CloseStoreError",
NULL,
NULL
);
PyAddCrlToStoreError = PyErr_NewException(
"libsignature.AddCRLToStoreError",
NULL,
NULL
);
PyStrToBinLenError = PyErr_NewException(
"libsignature.StrToBinLenError",
NULL,
NULL
);
PyStrToBinContentError = PyErr_NewException(
"libsignature.StrToBinContentError",
NULL,
NULL
);
PyVerifyMsgSignatureError = PyErr_NewException(
"libsignature.VerifySignError",
NULL,
NULL
);
PyGetCertChainError = PyErr_NewException(
"libsignature.ChainCertError",
NULL,
NULL
);
PyReadCertError = PyErr_NewException(
"libsignature.ReadCertError",
NULL,
NULL
);
PyReadCrlError = PyErr_NewException(
"libsignature.ReadCRLError",
NULL,
NULL
);
Py_INCREF(PyOpenStoreError);
Py_INCREF(PyAddCertToStoreError);
Py_INCREF(PyCloseStoreError);
Py_INCREF(PyAddCrlToStoreError);
Py_INCREF(PyStrToBinLenError);
Py_INCREF(PyStrToBinContentError);
Py_INCREF(PyVerifyMsgSignatureError);
Py_INCREF(PyGetCertChainError);
Py_INCREF(PyReadCertError);
Py_INCREF(PyReadCrlError);
PyModule_AddObject(m, "error", PyOpenStoreError);
PyModule_AddObject(m, "error", PyAddCertToStoreError);
PyModule_AddObject(m, "error", PyCloseStoreError);
PyModule_AddObject(m, "error", PyAddCrlToStoreError);
PyModule_AddObject(m, "error", PyStrToBinLenError);
PyModule_AddObject(m, "error", PyStrToBinContentError);
PyModule_AddObject(m, "error", PyVerifyMsgSignatureError);
PyModule_AddObject(m, "error", PyGetCertChainError);
PyModule_AddObject(m, "error", PyReadCertError);
PyModule_AddObject(m, "error", PyReadCrlError);
}
Что делается в этом файле подробно описано здесь.
Для проверки работоспособности питоновской библиотеки, напишем следующий тест:
import libsignature
class TestLibSignature(unittest.TestCase):
"""
Класс для тестирования работы с КриптоПро CSP.
"""
def setUp(self):
"""
Задание путей до тестовых файлов
"""
self._cert_file = os.path.join(current_path, "files/ca.cer")
self._crl_file = os.path.join(current_path, "files/ca.crl")
self._user_cert = os.path.join(current_path, "files/user.cer")
self._sig_file = os.path.join(current_path, "files/test_sign.sig")
self._store = "ROOT"
def test_load_certificate(self):
"""
Проверка загрузки сертификата.
"""
result = libsignature.load_certificate(self._cert_file, self._store)
self.assertIsNone(result)
def test_load_crl(self):
"""
Проверка загрузки списка отозванных серитификатов.
"""
result = libsignature.load_crl(self._crl_file, self._store)
self.assertIsNone(result)
def test_verify_cert_chain(self):
"""
Проверка корректности цепочки сертификатов
"""
result = libsignature.verify_chain_certificate(self._user_cert)
self.assertIsNone(result)
def verify_signature(self):
"""
Проверка подписи сообщения
"""
with open(self._sig_file, "rb") as sigfile:
signature = sigfile.read()
result = libsignature.vefigy_signature(signature)
self.assertIsNone(result)
if __name__ == '__main__':
unittest.main()
Теперь все готово, и можно запусть команду make test для проверки работоспособности.
Implementation of CryptoPro CSP
The hierarchical architecture of the Cryptographic Functions in the Windows Operating System allows for the use of the Russian cryptographic algorithms implemented in CryptoPro CSP at all possible levels.
Implementation at the Crypto API 2. 0 Level
CryptoPro CSP can be used in application software (as can any other cryptoprovider supplied with the Windows operating system) using the Crypto API 2.0 interface, a detailed description of which is provided in the MSDN (Microsoft Developer Network) program documentation. In such cases the method for selecting the algorithm for the application software can be determined by the user’s/sender’s public-key-algorithm identifier which is contained in the X.509 certificate.
Implementation at the Crypto API 2.0 level provides the ability to use a wide range of functions which solve most problems related to the presentation (formats) of various cryptographic communications (signed, encrypted) by means of the presentation of public keys as digital certificates and by means of the storage and retrieval of certificates in various directories including LDAP.
The functions of CryptoPro CSP allow for the full implementation of presentation and exchange of data in compliance with international recommendations and the Public Key Infrastructure.
Implementation at the CSP Level
CryptoPro CSP can be used directly in an application program by loading the module using the Load Library function. With this in mind the package includes a Programmer’s Manual describing the various sets of functions and the test software. With this type of implementation only a limited set of low-level cryptographic functions corresponding to the Microsoft CSP interface are accessible to the software.
Using Com Interfaces
CryptoPro can be used with COM interfaces developed by Microsoft.
- CAPICOM 2.0
- Certificate Services
- Certificate Enrollment Control
Certificate Enrollment Control
The COM interface Certificate Enrollment Control (implemented in the file xenroll.dll) is designed for the use of a limited number of Crypto API 2.0 functions related to key generation, certificate requests and the processing of certificates received from the Certification Authority using the programming languages Visual Basic, C++, Java Script, VBScript and the development environment Delphi.
It is this interface that is used by the various Certification Authorities (Versign, Thawte, ect.) in the producing of user certificates on the Windows platform.
CAPICOM 2
CAPICOM (implemented in the file capicom.dll) offers the COM interface that uses the primary functions of CryptoAPI 2.0 . This component is an extension of the existing COM Certificate Enrollment Control interface (xenroll.dll) which is implemented by the client functions responsible for key generation, certificate requests and interchange with the certification authority.
With the release of this component the use of digital-signature generation and verification functions, functions responsible for the construction and verification of sequences of certificates and functions responsible for interaction with different directories (including the Active Directory) with Visual Basic, C++, JavaScript, VBScript and the development environment Delphi became possible. Using CAPICOM it is possible to implement the operation of the “thin” client within the browser Internet Explorer’s interface.
The component CAPICOM is freeware and is included as part of the Micrsoft Platform SDK Developer’s redistributable toolbox.
More detailed information on the CAPICOM interface is available on the server https://www.cryptopro.ru/products/csp/usage. The distributive for the interface and sample applications are available in the CD in the directory “\REDISTR\CAPICOM 2.0”
Certificate Services
Certificate Services include several COM interfaces which allow the user to alter the functionality of the Certification Authority built-in to the Windows Server operating system. Using these interfaces it is possible to:
- Process certificate requests from users.
- Alter the composition of X.509 addendums recorded in certificates issued by the authority.
- Determine additional means of publication (storage) of certificates issued by the authority.
Using TLS Protocol in Application Software
Aside from its use in the Internet Explorer interface, the TLS protocol can also be used by application software along with CryptoPro CSP for the authentication and protection of data transmitted according to its own private protocols based on TCP/IP and HTTPS.
For the implementation of the TLS protocol WebClient and WebServer sample implementations are included in the set of samples provided with the platform SDK.
Sample Applications of Cryptographic Security Tools
Test software, including sample invocations of the primary functions of Crypto API 2.0 is provided with CryptoPro CSP. These samples are found in the directory (“\SAMPLES\csptest”). A large number of sample applications of Crypto API 2.0, CAPICOM and Certificate Services functions are offered in the Microsoft Docs and in the Platform SDK developer’s toolbox.
A conference on issues surrounding the use of cryptographic functions and public-key certificates is held on the CryptoPro server (https://www.cryptopro.ru/forum2/).
CryptoPro CSP makes possible the use of reliable, certified cryptographic information-security tools as components of the wide range of tools and software of the Microsoft Corporation for the implementation of secure document flow and E-commerce based on the Public-Key infrastructure and in compliance with international recommendations X.509.
- Printer-friendly version
Certificates
CryptoPro CSP has a Federal Security Service certificate of conformance.
Integration
The integration of the CryptoPro CSP with MS Windows operating system allows the use of standard products.
The accordance with the Microsoft CSP interface allows for easy integration into applications by different vendors, which support this interface.
Support for digitally signed XML documents using XMLdsig for Windows (MSXML5, MSXML6) allows for the use of Russian cryptographic algorithms in the Microsoft Office InfoPath – a component system of Microsoft Office.
Portability
For easy and portable integration of cryptographic functions on the Unix platforms, the program interface similar to the Microsoft CryptoAPI 2.0 specifications is provided. This interface allows for the use of the high-level functions to create cryptographic messages (encryption, digital signature), building and verifying the chain of certificates, generating keys and processing the messages and certificates.
Заключение.
Процесс создания библиотеки получился трудоемкий, но на выходе получилась рабочая библиотека, которой можно пользоваться. В репозиотории можете найти пакет для работы из python, но также можно использовать только C-ную часть. Для работы С библиотеки нужно выполнить make build_c.