⚠️ Дисклеймер
Материал предоставлен “как есть” и отражает практический опыт эксплуатации в конкретных инфраструктурах.
Авторы не гарантируют:
- корректность решений в вашей среде;
- совместимость с вашей конфигурацией;
- отсутствие побочных эффектов.
Применение любых инструкций выполняется на ваш страх и риск.
Перед внедрением изменений рекомендуется:
- тестирование на изолированном контуре;
- проверка зависимостей и текущей конфигурации;
- наличие актуальных резервных копий (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 *.cer2. Установить сертификаты под пользователем 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Выйти обратно:
exit3. Установить второй корневой сертификат под 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 и его утилиты:
certmgrcsptestcryptcp
Итог
Рабочая схема на этой машине:
- Не использовать системное trust store Ubuntu для ГОСТ-сертификатов.
- Использовать только пользовательские хранилища КриптоПро.
- Ставить:
AFF...вuRoot8CAE...вuRoot4BC6...вuCA
- Проверять через
certmgr -list -store uRootиcertmgr -list -store uCA.