⚠️ Дисклеймер

Материал предоставлен “как есть” и отражает практический опыт эксплуатации в конкретных инфраструктурах.

Авторы не гарантируют:

  • корректность решений в вашей среде;
  • совместимость с вашей конфигурацией;
  • отсутствие побочных эффектов.

Применение любых инструкций выполняется на ваш страх и риск.

Перед внедрением изменений рекомендуется:

  • тестирование на изолированном контуре;
  • проверка зависимостей и текущей конфигурации;
  • наличие актуальных резервных копий (backup).

Установка ГОСТ-сертификатов через КриптоПро CSP (Ubuntu 22.04)

Система

Ubuntu 22.04.4 LTS (Jammy Jellyfish)

Исходные данные

Имеются сертификаты:

  • AFF05C9E2464941E7EC2AB15C91539360B79AA9D.cer — корневой сертификат
  • 8CAE88BBFD404A7A53630864F9033606E1DC45E2.cer — корневой сертификат
  • 4BC6DC14D97010C41A26E058AD851F81C842415A.cer — промежуточный сертификат

Что выяснилось

  • Системный OpenSSL на Ubuntu 22.04 читает X.509-структуру, но не умеет полноценно работать с ГОСТ-ключами.
  • update-ca-certificates для этой задачи не помогает.
  • КриптоПро CSP установлен и работает.
  • Машинные хранилища КриптоПро (mRoot, mCA, mMy) не открываются с ошибкой 0x8009001d.
  • Пользовательские хранилища (uRoot, uCA, uMy) работают.
  • Рабочий путь — установка сертификатов через certmgr в пользовательские хранилища.

Проверка CSP

/opt/cprocsp/bin/amd64/csptest -keyset -verifycontext -fqcn
/opt/cprocsp/bin/amd64/csptest -keyset -verifycontext -hard_rng
/opt/cprocsp/bin/amd64/csptest -keyset -enum_cont -verifycontext -fqcn
/opt/cprocsp/bin/amd64/csptest -keyset -enum_cont -fqcn -verifyc

Ожидаемый признак исправного CSP: AcquireContext: OK.

Проверка хранилищ

Пользовательские хранилища

/opt/cprocsp/bin/amd64/certmgr -list -store uRoot
/opt/cprocsp/bin/amd64/certmgr -list -store uCA
/opt/cprocsp/bin/amd64/certmgr -list -store uMy

Машинные хранилища

/opt/cprocsp/bin/amd64/certmgr -list -store mRoot
/opt/cprocsp/bin/amd64/certmgr -list -store mCA
/opt/cprocsp/bin/amd64/certmgr -list -store mMy

Если для m* хранилищ появляется ошибка:

Failed to open store
Provider DLL failed to initialize correctly.
 
[ErrorCode: 0x8009001d]

то в текущей конфигурации использовать нужно только uRoot и uCA.

Установка сертификатов

1. Перейти в каталог с сертификатами

cd /tmp/cert
ls -l *.cer

2. Установить сертификаты под пользователем usr1cv8

Переключиться на пользователя:

su usr1cv8

Установить корневой сертификат AFF05C9E2464941E7EC2AB15C91539360B79AA9D.cer в uRoot:

/opt/cprocsp/bin/amd64/certmgr -inst -store uRoot -file AFF05C9E2464941E7EC2AB15C91539360B79AA9D.cer

При предупреждении подтвердить установку:

o

Установить промежуточный сертификат 4BC6DC14D97010C41A26E058AD851F81C842415A.cer в uCA:

/opt/cprocsp/bin/amd64/certmgr -inst -store uCA -file 4BC6DC14D97010C41A26E058AD851F81C842415A.cer

Выйти обратно:

exit

3. Установить второй корневой сертификат под root

Сертификат 8CAE88BBFD404A7A53630864F9033606E1DC45E2.cer под usr1cv8 давал ошибку 0x80070005 Access is denied, поэтому он ставится от root:

cd /tmp/cert
/opt/cprocsp/bin/amd64/certmgr -inst -store uRoot -file 8CAE88BBFD404A7A53630864F9033606E1DC45E2.cer

При предупреждении подтвердить установку:

o

Проверка после установки

Проверить корневое хранилище:

/opt/cprocsp/bin/amd64/certmgr -list -store uRoot

Проверить хранилище промежуточных сертификатов:

/opt/cprocsp/bin/amd64/certmgr -list -store uCA

Готовый набор команд

Под usr1cv8

cd /tmp/cert
su usr1cv8
 
/opt/cprocsp/bin/amd64/certmgr -inst -store uRoot -file AFF05C9E2464941E7EC2AB15C91539360B79AA9D.cer
/opt/cprocsp/bin/amd64/certmgr -inst -store uCA   -file 4BC6DC14D97010C41A26E058AD851F81C842415A.cer
 
exit

Под root

cd /tmp/cert
/opt/cprocsp/bin/amd64/certmgr -inst -store uRoot -file 8CAE88BBFD404A7A53630864F9033606E1DC45E2.cer

Важные замечания

  • Не использовать для этой задачи update-ca-certificates.
  • Не рассчитывать на штатный OpenSSL для проверки ГОСТ-цепочек.
  • Использовать КриптоПро CSP и его утилиты:
    • certmgr
    • csptest
    • cryptcp

Итог

Рабочая схема на этой машине:

  1. Не использовать системное trust store Ubuntu для ГОСТ-сертификатов.
  2. Использовать только пользовательские хранилища КриптоПро.
  3. Ставить:
    • AFF... в uRoot
    • 8CAE... в uRoot
    • 4BC6... в uCA
  4. Проверять через certmgr -list -store uRoot и certmgr -list -store uCA.