Skip to content
 
 

Latest commit

 

History

17 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

cryptopro

Все что в этом репозитории реально используется в работе. И да, скрипты генерировала нейронка!

Контейнеризированный стенд для CryptoPro CSP:

  • сборка Docker-образа из локального дистрибутива;
  • генерация ключевого контейнера и запроса на сертификат;
  • автоматический выпуск/установка сертификата через тестовый certsrv (опционально);
  • импорт ключа из PFX;
  • подписание файлов в контейнере.

Для выпуска тестовых ЭЦП, для импорта PFX в контейнер, для проверки ЭЦП путем подписания файла в docs/.

Дистрибутив CryptoPro в репозиторий не входит: его нужно скачать самостоятельно и положить в dist/.

Структура каталогов

Путь Назначение
dist/ Дистрибутивы CryptoPro. Сюда положить linux-amd64_deb.tar / .tgz и/или linux-arm64_deb.tar / .tgz
lic/license.key Серийный номер лицензии (альтернатива LICENSE_KEY=...)
scripts/cfg.yaml Субъект сертификата, имя контейнера, пароль, пути
keys/ Результат работы скриптов (см. ниже)
keys/example.pfx Входной PFX для make import-pfx (положите свой файл; путь можно изменить в cfg.yaml)
docs/ Файлы для подписи. Рядом появится отсоединённая подпись *.sig

dist/, keys/ (кроме .keep) и lic/ не коммитятся — см. .gitignore.

Быстрый старт

1) Дистрибутивы

Скачайте Linux-пакеты CryptoPro CSP и положите в dist/:

  • dist/linux-amd64_deb.tar или dist/linux-amd64_deb.tgz
  • dist/linux-arm64_deb.tar или dist/linux-arm64_deb.tgz

2) Соберите образ

make build

Дополнительно:

make amd64
make arm64

3) Лицензия

Вариант A:

make run LICENSE_KEY=<ваш_ключ>

Вариант B: сохраните ключ в lic/license.key, затем запускайте make run / make gen / make import-pfx / make sign без аргумента.

4) Конфигурация

Отредактируйте scripts/cfg.yaml: ФИО, организация, ИНН/ОГРН, имя контейнера и пароль. Значения в репозитории — нейтральный пример для тестового УЦ.

Запятые в атрибутах RDN недопустимы: они считаются разделителями. Имя контейнера лучше держать до 8 символов: на Linux CSP каталог иначе обрезается до 8.3 (test-container → test-con.000).

Команды Makefile

Репозиторий монтируется в контейнер как /home, каталог keys/ — как /var/opt/cprocsp/keys/root.

make run

Интерактивный shell в образе cryptopro.

make gen

Запускает scripts/generate-certs.sh: создаёт контейнер, запрос и (при certsrv.auto_issue: true) выпускает тестовый сертификат на testgost2012.cryptopro.ru.

Результат на хосте в keys/:

  • <container.name>.000/ — ключевой контейнер;
  • root_ca.cer — УЦ в DER (путь задаётся в root_ca.out_ca_cer);
  • request.pem, certnew.cer, certnew.p7b, testroot.p7b — запрос и файлы выпуска (TMP_ARTIFACTS_DIR=/home/keys задаётся в make gen).

make import-pfx

Запускает scripts/import-pfx.sh. По умолчанию берёт keys/example.pfx (pfx.file в cfg.yaml).

PFX_PIN=<пароль_pfx> make import-pfx

Результат на хосте:

  • keys/<container.name>.000/ — контейнер, импортированный из PFX;
  • keys/root_ca.cer — промежуточный УЦ из PFX.

make sign

Запускает scripts/sign.sh. По умолчанию:

  • вход: docs/certmgr.pdf;
  • выход: docs/certmgr.pdf.sig;
  • сертификат выбирается по THUMBPRINT или из хранилища uMy по container.name;
  • PIN берётся из .container.password (если PIN не задан явно).
make sign
make sign INPUT=docs/cryptcp_5.0.x.pdf

Внутри контейнера (make run):

./scripts/sign.sh ./docs/file.pdf ./docs/file.pdf.sig

scripts/generate-certs.sh: что делает

  1. Проверяет зависимости: yq, curl, openssl.
  2. Читает scripts/cfg.yaml (обязательны rdn.CN, rdn.INN, rdn.OGRN, rdn.INN_OID, rdn.OGRN_OID).
  3. Формирует RDN, включая ИНН/ОГРН через OID.
  4. При наличии LICENSE_KEY вызывает cpconfig -license -set.
  5. Скачивает корневой PKCS#7 тестового УЦ, ставит в uRoot и сохраняет CA в root_ca.out_ca_cer.
  6. Создаёт или пересоздаёт контейнер \\.\HDIMAGE\<container.name> (FORCE_RECREATE_CONTAINER=1 по умолчанию).
  7. Генерирует запрос (cryptcp -creatrqst).
  8. Проверяет, что в контейнере есть signature key (не только exchange).
  9. При certsrv.auto_issue: true отправляет запрос в тестовый certsrv, скачивает сертификат и цепочку, привязывает к контейнеру.

Основные переменные окружения: CONFIG_PATH, CONTAINER_NAME, KEY_PASSWORD, LICENSE_KEY, TMP_ARTIFACTS_DIR, THUMBPRINT, PIN, PFX_FILE, PFX_PIN.

Частые проблемы

crypto pro distro is not provided...

В dist/ нет файла linux-<arch>_deb.tar или .tgz.

yq (mikefarah/yq) не найден

yq ставится в образ при make build. Если запускаете скрипт вне контейнера — установите yq локально.

thumbprint not found in uMy

make sign запускает новый контейнер: хранилище uMy собирается заново через csptestf -absorb из keys/. Если сертификат не находится — задайте THUMBPRINT или cert.thumbprint в cfg.yaml, либо повторите make gen.

Сертификат не выдан. Проверьте ответ ...

Тестовый certsrv недоступен или запрос отклонён. Проверьте scripts/cfg.yaml и попробуйте certsrv.auto_issue: false, затем выпустите сертификат вручную.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages