Запись цепочки сертификатов в контейнер
Опубликовано Алексей Артемов on 2025-03-31 04:41

Для записи цепочки сертификатов в контейнер есть несколько способов.

  1. Утилита ComLine в КриптоПро JCP\JavaCSP
  2. С помощью утилит из состава КриптоПро CSP
  3. С помощью графического интерфейса КриптоПро CSP (cpanel)
  4. С помощью графического интерфейса КриптоПро JCP (ControlPane)

 


 

1. Утилита ComLine в КриптоПро JCP\JavaCSP

Откройте терминал (linux) или командную строку (Windows) и перейдите в директорию с JCP\JCSP

1.1 Linux

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

java -cp .:*: ComLine.Certs -alias ContainerName -storetype HDImageStore -keypass 12345678 -certs /tmp/certificate.cer,/tmp/subca.cer,/tmp/root.cer

Обозначение параметров:

  • alias - имя контейнера
  • storetype - имя хранилища
  • keypass - пароль к контейнеру. Если пароля нет, то поставьте значение null (-keypass null) или полностью уберите данный параметр
  • certs - цепочка сертификатов

Важные особенности:

  • в параметре certs указывайте полные пути к файлам сертификатов
  • в параметре certs соблюдайте порядок указания сертификатов certificate.cer (ваш сертификат), subca.cer (промежуточный), root.cer (корневой)

Если у вас используется криптопровайдер JCSP то для установки необходимо изменить имя хранилища -storetype HDImage и указать провайдер -storeprovider JCSP

java -cp .:*: ComLine.Certs -alias ContainerName -storetype HDImage -keypass 12345678 -storeprovider JCSP -certs /tmp/certificate.cer,/tmp/subca.cer,/tmp/root.cer

1.2 Windows

Абсолютно аналогичные действия как для Linux, но в командах следует изменить -classpath (-cp) и пути к сертификатам, пример команд ниже

java -cp * ComLine.Certs -alias ContainerName -storetype HDImageStore -keypass 12345678 -certs C:\tmp\certificate.cer,C:\tmp\subca.cer,C:\tmp\root.cer

java -cp * ComLine.Certs -alias ContainerName -storetype HDImage -keypass 12345678 -storeprovider JCSP -certs C:\tmp\certificate.cer,C:\tmp\subca.cer,C:\tmp\root.cer

 


 

2. С помощью утилит из состава КриптоПро CSP

В первую очередь сертификат должен быть установлен в контейнер, если нет, то установим

В CSP версии 5.0 R3 и выше

certmgr -install -cont ContainerName -to-cont -cert -file certificate.cer

В CSP ниже версии 5.0 R3

certmgr -install -cont ContainerName -inst_to_cont -cert -file certificate.cer

Примечание: если на конетйнер установлен пароль, то добавьте опцию -pin и укажите пароль (например: -pin 12345678)

В различных ОС путь к утилитам certmgr и csptest отличается:

  • Windows - "C:\Program Files\Crypto Pro\CSP"
    • к утилитам добавляется расширение файла .exe (пример: "C:\Program Files\Crypto Pro\CSP\certmgr.exe")
  • Linux - /opt/cprocsp/bin/<arch>/
    • вместо <arch> указывается арзитектура, например amd64
  • MacOS - /opt/cprocsp/bin/

2.1 Если у вас цепочка без промежуточных сертификатов, т.е. только корневой сертификат и ваш сертификат

Выполните команду

csptest -keys -loadext root.cer -cont ContainerName

  • root.cer - файл корневого сертификата
  • ContainerName имя контейнера

2.2 Если у вас цепочка с промежуточными сертификатами

Нам понадобиться сам файл конечного сертификата (листа). Если его нет, то экспортируем из контейнера ContainerName в файл cert.cer

certmgr -export -cert -cont ContainerName -dest certificate.cer

Теперь необходимо сформировать p7b с полной цепочкой сертификатов.

ВАЖНО! в файле p7b должна быть полная цепочка включая листовой (конечный) сертификат

Для этого создадим временное хранилище сертификатов Tmp в памяти пользователя

1) Установим во временное хранилище корневой сертификат

certmgr -install -store uTmp -cert -file root.cer

2) Установим во временное хранилище промежуточный сертификат

certmgr -install -store uTmp -cert -file subca.cer

3) Установим во временное хранилище конечный (листовой) сертификат

certmgr -install -store uTmp -cert -file certificate.cer

4) Теперь создадим p7b с цепочкой

certmgr -export -store uTmp -all -dest test.p7b

5) Установим всю цепочку

csptest -keys -loadext test.p7b -cont chainTest

Примечание: Если на контейнер установлен пароль то добавьте параметр -pass и укажите пароль (например: -pass 12345678)

6) Удалим временное хранилище

certmgr -del -store uTmp -all

2.3 Проверка корректной установки цепочки сертификатов

Для проверки что цепочка сертификатов успешно установлена в контейнер выполните команду:

csptest -keys -cont chainTest -check

Необходимо смотреть раздел Extensions

 


 

3. С помощью графического интерфейса КриптоПро CSP (cpanel)

Данный способ применим только в операционных системах Windows

1) Откройте программу КриптоПро CSP

Шаг 1

2) Перейдите на вкладку "Сервис" и нажмите "Установить личный сертификат"

Шаг 2

3) Нажмите на кнопку Обзор и выберите ваш сертификат (листовой, конечный сертификат). Затем нажмите Далее

Шаг 3

4) У вас появится окно для просмотра данных сертификата, проверьте что выбран нужный сертификат и нажмите Далее

Шаг 4

5) Выберите ваш контейнер. Для удобства рекомендуем отметить галочкой пункт "Найти контейнер автоматически", тогда контейнер будет найден автоматически

Шаг 5

6) Данный шаг самый важный! Отметьте пункт галочкой "Установить сертификаты (цепочку сертификатов) в контейнер"

ВАЖНО! пункт должен быть отмечен именно галочкой как на скриншоте.

Шаг 6

7) Нажмите Готово и завершите работу мастера установки.

Шаг 7

 


 

4. С помощью графического интерфейса КриптоПро JCP (ControlPane)

Через контрольную панель можно установить цепочку только с помощью p7b файла в котором находится сразу вся цепочка, включая листовой сертификат.

1) Откройте контрольную панель JCP

Для этого перейдите в папку с JCP И выполните следюущую команду

Windows:

ControlPane.bat "c:\Program Files\Java\jdk-21"

Linux\macOS:

./ControlPane.sh /usr/lib/jvm//jdk-21.0.6-oracle-x64/

где вместо "c:\Program Files\Java\jdk-21" и /usr/lib/jvm//jdk-21.0.6-oracle-x64/ укажите путь к вашей JDK

2) Перейдите на вкладку "Хранилище ключей и сертификатов" и выберите ваш Контейнер

Шаг 1

3) Разверните "дерево" контейнера (два раза нажмите на имя контейнера), выберите "Ключ обмена и сертификат" и нажмите кнопку "Добавить"

Шаг 3

4) Если в контейнер уже был установлен сертификат то у вас появится окно с предложением заменить сертификат цепочкой. Нажмите "Да"

Шаг 4

5) Убедиться что цепочка установилась можно снова открыв ваш Контейнер и около имени сертификата будет в скобках написано (Цепочка)

Шаг 5

(2 плюсик(ов))
Класс!
Не очень :(