Закрытый ключ КриптоПро CSP представляет из себя флеш-накопитель, на котором в директории ххххх.000 лежат файлы primary.key, primary2.key, masks.key, masks2.key, name.key и header.key.

Такие ключи читаются только программой CryptoProJCP, серверная лицензия которой стоит на данный момент 120 тыс рублей.
Но наша задача – получить .p12 контейнер с наименьшими затратами.
C контейнером .p12 можно работать из java например с помощью библиотеки bouncycastle.
Но это уже тема следующей статьи.
Шаг 1.
Для экспорта ключа нам поможет замечательная утилита P12FromGostCSP, которая позволяет конвертировать ключ в формат .pfx
Мы вставляем флешку, запускаем утилиту и выбираем ключ для преобразования. Далее указываем пароль на хранилище и на выходе получим хранилище формата .pfx
Впрочем, это только начало, так как после конвертации контейнер все еще недоступен для чтения из java.
Шаг 2.
Далее нам потребуется с помощью OpenSSL извлечь закрытый ключ и сертификат и поместить их в .p12 хранилище.
Но есть проблема - OpenSSL из коробки не работает с алгоритмом ГОСТ 2012
Для этого нам потребуется программа openssl с поставленным на нее дополнением gost engine (ссылка тут). Нам необходимо установить это дополнение, следуя инструкциям, скомпилировав его из исходников.
Но есть вариант попроще...
Мы можем воспользоваться докер-контейнером, в котором уже установлен OpenSSL вместе с дополнением для корректной работы с алгоритмом ГОСТ 2012.
Ссылка на статью с описанием работы с данным докер-образом: Docker-образы с поддержкой ГОСТ-сертификатов в openssl, curl, php, nginx
В самом простом варианте нам требуется запустить этот докер-контейнер, подключиться к нему пробросив volume и выполнить пару консольных команд для извлечения закрытого ключа и сертификата из .pfx и помещения их в .p12
Запустим контейнер, пробросив папку tmp. В ней будем выполнять преобразования.
docker run -v "c:/tmp:/usr/tmp" --rm -i -t rnix/openssl-gost bash
Шаг 3.
#Достаем ключ
openssl pkcs12 -in gost.pfx -out gost.key -nocerts
#После команды задаем пароль для ключа.
#Достаем сертификат
openssl pkcs12 -in gost.pfx -out gost.cer -nokeys
#Объединяем их в хранилище p12, задавая ключу имя prod, его нужно будет прописать в application.properties как key.alias
openssl pkcs12 -export -inkey gost.key -in gost.cer -out gost.p12 -name prod
Полученное хранилище gost.p12 и сертификат gost.cer можно вставлять в папку resources/security. Не забываем указать все пароли и логины, а также имена файлов в application.properties.
P.S. Если тема интересна, напишу статью как сделать сервис на spring boot, который будет подписывать файлы и сообщения с помощью ключа и сертификата в .p12 контейнере по алгоритму ГОСТ 2012.
Спасибо за внимание :)