В последнее время, видимо на волне импортозамещения, ко мне обратилось несколько совершенно не связанных человек за консультацией по проектам, которые в конечном итоге сводились к реализации ГОСТ-ового алгоритма шифрования или электронной подписи на JavaScript для использования в браузере. Ниже я попытаюсь объяснить, почему такая реализация не имеет смысла.
По просьбам трудящихся публикую инструкцию "выпускаем себе тестовые сертификаты крипто-про как горячие пирожки!". Здесь описан процесс получение сертификата квалифицированной электронной подписи (КЭП) содержащего любые данные (OID) на тестовом удостоверяющем центре КриптоПро.
Изначально предполагается, что у нас уже установлен CryptoPro CSP и КриптоПро ЭЦП Browser plug-in, если нет, то идем качаем на официальный сайт. Все операции будут описаны относительно работы в ОС Linux. В MacOS и Windows, в принципе, не должно быть существенных отличий, кроме поправки на пути к исполняемым файлам.
Так же необходимо наличие действительного сертификата тестового УЦ КриптоПро в корневом хранилище сертификатов. Проверить его наличие можно командой
/opt/cprocsp/bin/amd64/certmgr -list -store uRoot
В выводе должно быть что-то вроде
Issuer : E=support@cryptopro.ru, C=RU, L=Moscow, O=CRYPTO-PRO LLC, CN=CRYPTO-PRO Test Center 2 Subject : E=support@cryptopro.ru, C=RU, L=Moscow, O=CRYPTO-PRO LLC, CN=CRYPTO-PRO Test Center 2 Serial : 0x37418882F539A5924AD44E3DE002EA3C SHA1 Hash : 0xcd321b87fdabb503829f88db68d893b59a7c5dd3 SubjKeyID : 4e833e1469efec5d7a952b5f11fe37321649552b Signature Algorithm : ГОСТ Р 34.11/34.10-2001 PublicKey Algorithm : ГОСТ Р 34.10-2001 (512 bits) Not valid before : 27/05/2019 07:24:26 UTC Not valid after : 26/05/2024 07:34:05 UTC PrivateKey Link : No
И если вдруг его нет, или истек срок действия (Not valid after), то нужно скачать свежий со страницы https://www.cryptopro.ru/certsrv/certcarc.asp, далее по ссылке Загрузка сертификата ЦС
и установить командой
/opt/cprocsp/bin/amd64/certmgr -inst -store uRoot -file /tmp/certnew.cer
Вместо хранилища корневых сертификатов (uRoot) тут можно использовать хранилище для промежуточных УЦ (uCA). Так же важно понимать, что uRoot - это хранилище текущего пользователя, а не root, у него свое такое же хранилище.