Преобразование закрытого ключа КриптоПро CSP по ГОСТ 2012 в контейнер p12, который понимает java

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.


Закрытый ключ КриптоПро 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.
Ссылка на статью с описанием работы с данным докер-образом:
https://habr.com/ru/post/353534/


В самом простом варианте нам требуется запустить этот докер-контейнер, подключиться к нему пробросив 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.

Спасибо за внимание :)

Источник: https://habr.com/ru/articles/756020/


Интересные статьи

Интересные статьи

Привет, Хабр!В современном автоматизированном тестировании настройка и поддержка тестовой среды часто может стать трудоемкой задачей, особенно при работе со множественными зависимостями и их конфигура...
Нативная поддержка JSON одно из преимуществ разработки full-stack JavaScript приложений. JSON является простым, не требующим схемы и человекочитаемым - качества особенно ценимые на ранней стадии разра...
Правительство Китая в очередной раз выразило резкую неприязнь к играм, в результате чего одна из ключевых компаний на рынке ограничила время, которое можно проводить в играх.Пекин всегда настороженно ...
21 августа мы поговорили в прямом эфире с Павлом Жовнером. В прошлом месяце zhovner со своей командой запустил на кикстартере тамагочи для хакеров Flipper Zero. Целью было $60 0...
Привет, Хабр! Предлагаю вашему вниманию перевод замечательной статьи из цикла статей небезызвестного Джейка Вортона о том, как происходит поддержка Андроидом Java 8. Оригинал статьи лежит...