Все что в этом репозитории реально используется в работе. И да, скрипты генерировала нейронка!
Контейнеризированный стенд для 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.
Скачайте Linux-пакеты CryptoPro CSP и положите в dist/:
dist/linux-amd64_deb.tarилиdist/linux-amd64_deb.tgzdist/linux-arm64_deb.tarилиdist/linux-arm64_deb.tgz
make buildДополнительно:
make amd64
make arm64Вариант A:
make run LICENSE_KEY=<ваш_ключ>Вариант B: сохраните ключ в lic/license.key, затем запускайте make run / make gen / make import-pfx / make sign без аргумента.
Отредактируйте scripts/cfg.yaml: ФИО, организация, ИНН/ОГРН, имя контейнера и пароль. Значения в репозитории — нейтральный пример для тестового УЦ.
Запятые в атрибутах RDN недопустимы: они считаются разделителями. Имя контейнера лучше держать до 8 символов: на Linux CSP каталог иначе обрезается до 8.3 (test-container → test-con.000).
Репозиторий монтируется в контейнер как /home, каталог keys/ — как /var/opt/cprocsp/keys/root.
Интерактивный shell в образе cryptopro.
Запускает 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).
Запускает 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.
Запускает 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- Проверяет зависимости:
yq,curl,openssl. - Читает
scripts/cfg.yaml(обязательныrdn.CN,rdn.INN,rdn.OGRN,rdn.INN_OID,rdn.OGRN_OID). - Формирует RDN, включая ИНН/ОГРН через OID.
- При наличии
LICENSE_KEYвызываетcpconfig -license -set. - Скачивает корневой PKCS#7 тестового УЦ, ставит в
uRootи сохраняет CA вroot_ca.out_ca_cer. - Создаёт или пересоздаёт контейнер
\\.\HDIMAGE\<container.name>(FORCE_RECREATE_CONTAINER=1по умолчанию). - Генерирует запрос (
cryptcp -creatrqst). - Проверяет, что в контейнере есть signature key (не только exchange).
- При
certsrv.auto_issue: trueотправляет запрос в тестовыйcertsrv, скачивает сертификат и цепочку, привязывает к контейнеру.
Основные переменные окружения: CONFIG_PATH, CONTAINER_NAME, KEY_PASSWORD, LICENSE_KEY, TMP_ARTIFACTS_DIR, THUMBPRINT, PIN, PFX_FILE, PFX_PIN.
В dist/ нет файла linux-<arch>_deb.tar или .tgz.
yq ставится в образ при make build. Если запускаете скрипт вне контейнера — установите yq локально.
make sign запускает новый контейнер: хранилище uMy собирается заново через csptestf -absorb из keys/. Если сертификат не находится — задайте THUMBPRINT или cert.thumbprint в cfg.yaml, либо повторите make gen.
Тестовый certsrv недоступен или запрос отклонён. Проверьте scripts/cfg.yaml и попробуйте certsrv.auto_issue: false, затем выпустите сертификат вручную.