ЭЦП по ГОСТ на GNU/Linux с помощью OpenSSL / Хабр

Пример установки отдельно взятого сертификата из контейнера

При необходимости скопируйте ключевой контейнер \.FLASH.sidorov на жесткий диск:

/opt/cprocsp/bin/amd64/csptest -keycopy -contsrc '\.FLASHsidorov' -contdest '\.HDIMAGEsidor'>
	CSP (Type:80) v4.0.9009 KC1 Release Ver:4.0.9797 OS:Linux CPU:AMD64 FastCode:READY:AVX.
	CryptAcquireContext succeeded.HCRYPTPROV: 38556259
	CryptAcquireContext succeeded.HCRYPTPROV: 38770755
	Total: SYS: 0,000 sec USR: 0,100 sec UTC: 14,920 sec
	[ErrorCode: 0x00000000]

Наличие [ErrorCode: 0x00000000] в завершении каждой команды КриптоПРО говорит о ее успешном выполнении.

Проверьте наличие нового контейнера \.HDIMAGEsidor:

/opt/cprocsp/bin/amd64/csptest -keyset -enum_cont -fqcn -verifyc>
	CSP (Type:80) v4.0.9009 KC1 Release Ver:4.0.9797 OS:Linux CPU:AMD64 FastCode:READY:AVX.
	AcquireContext: OK. HCRYPTPROV: 34554467
	\.FLASHivanov
	\.FLASHpetrov
	\.FLASHsidorov
	\.FLASHvasiliev
	\.FLASHsmirnov
	\.HDIMAGEsidor
	OK.
	Total: SYS: 0,010 sec USR: 0,050 sec UTC: 0,130 sec
	[ErrorCode: 0x00000000]

Установите личный сертификат:

Установка сертификатов используя криптопро в linux

Сен042020

Описание процесса установки приведено на примере дистрибутива семейства Debian (x64).Названия файлов и директорий могут варьироваться от системы к системе.

При установке личных сертификатов не нужны права суперпользователя, и наоборот, при установке сертификатов УЦ (корневых и промежуточных) могут потребоваться такие права.

Подключите USB носитель с ключевыми контейнерами и проверьте результат команды:

/opt/cprocsp/bin/amd64/csptest -keyset -enum_cont -fqcn -verifyc
	CSP (Type:80) v4.0.9009 KC1 Release Ver:4.0.9797 OS:Linux CPU:AMD64 FastCode:READY:AVX.
	AcquireContext: OK. HCRYPTPROV: 16188003
	\.FLASHivanov\.FLASHpetrov\.FLASHsidorov\.FLASHvasiliev\.FLASHsmirnov
	OK.
	Total: SYS: 0,020 sec USR: 0,060 sec UTC: 0,180 sec

Можно сразу установить личные сертификатов из всех доступных контейнеров одной командой: /opt/cprocsp/bin/amd64/csptestf -absorb -certsПроизойдет установка сертификатов, находящихся во всех доступных в момент запуска команды контейнерах (съемных флэш-носителях, жесткого диска и т. д.) в хранилище uMy.

Эцп по гост на gnu/linux с помощью openssl

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

Про сертификаты:  Как восстановить пароль от ЭЦП ключа в личном кабинете налогоплательщика? InfoSaver

Удостоверяющий Центр выдал нам ключ и сертификат в одном PKCS#12 файле auth.p12
Я исхожу из того, что у нас в наличии есть linux и docker. Можно даже не локально – вполне можно закинуть наш документ куда-нибудь на хостинг и подключиться по SSH. Подробности установки docker и работы с докер-образами оставим за пределами этой заметки. Перейдём сразу к делу:

Прямо из папки, где лежит наш документ на подпись (document.pdf) и PKCS#12 файл (auth.p12) запускаем замечательный docker образ OpenSSL с поддержкой ГОСТ и заходим в контейнер:

sudo docker run --rm -i -t -v `pwd`:`pwd` -w `pwd` rnix/openssl-gost bash

Вытаскиваем из PKCS#12 файла приватный ключ и сохраняем его в pem-формате. Может потребоваться ввести ваш пароль от PKCS#12 файла.

openssl pkcs12 -in auth.p12 -out key.pem -engine gost -nodes -clcerts

Аналогично вытаскиваем из PKCS#12 файла и сертификат.

openssl pkcs12 -in auth.p12 -clcerts -nokeys -out pub.crt

Подписываем документ. Подпись будет отсоединенная, в формате PKCS#7 в отдельном файле (document.pdf.sig)

openssl smime -sign -signer pub.crt -inkey key.pem -engine gost -binary -noattr -outform DER -in document.pdf -out document.pdf.sig

Проверить подпись можно много где, как локально так и на сайте госуслуг, например.
Всё. Можно отправлять контрагенту документ и соответствующий sig файл.

Если вдруг у вас сертификат в формате DER (в Windows часто это файл с расширением .cer), то можно конвертировать такой сертификат в pem-формат:

openssl x509 -inform DER -in pub.cer -out pub.crt

Файлы в примерах команд выше:

auth.p12 – бинарный PFX-файл, содержащий сертификат и закрытый ключ
pub.crt – сертификат (содержащий открытый ключ) в текстовом формате PEM
pub.cer – сертификат (содержащий открытый ключ) в бинарном формате DER
key.pem – закрытый ключ
document.pdf – pdf-документ, который необходимо подписать
document.pdf.sig – файл куда будет сохранена отсоединённая подпись к документу

Про сертификаты:  RackStore | Проверка домена и компании для выпуска SSL сертификата - DV / OV / EV

Источники вдохновения:

Работаем с реестром запрещенных ресурсов
Не ждем, а готовимся к переходу на новые стандарты криптографической защиты информации
Docker-образы с поддержкой ГОСТ-сертификатов в openssl, curl, php, nginx
OpenSSL: простое шифрование с открытым ключом
https://stackoverflow.com/questions/52980370/how-to-convert-p12-to-crt-file
https://www.emaro-ssl.ru/blog/convert-ssl-certificate-formats/
https://qna.my-sertif.ru/q/213942
http://rodji.net/blog/2021/12/27/openssl-по-гост-подписывание-шифрование-пр/
https://polikarpoff.ru/all/eksport-ecp-v-formate-pkcs-12/

Оцените статью
Мой сертификат
Добавить комментарий