- Устанавливает КриптоПро из установщика
cryptopro/install/linux-amd64_deb.tgz
- Устанавливает лицензию КриптоПро
- Загружает корневой сертификат есиа
- Загружает пользовательский сертификат
- Запускает рест сервер со swagger и методом создания подписей
Лицензия устанавливается из аргумента LICENSE
, если не указана используется триал версия(работает 3 месяца).
в зависимости от аргумента ESIA_ENVIRONMENT
загружается сертификат нужного окружения есиа:
- Если не указан или указан
test
- сертификат тестового контура есиа (https://esia-portal1.test.gosuslugi.ru) - Если указан
prod
- сертификат от основного есиа (https://esia.gosuslugi.ru)
Корневые сертификаты есиа лежат в папке cryptopro/esia
Необходимо специальным образом сформировать zip-архив certificate_bundle.zip
и положить его в папку /cryptopro/certificates
.
Пример такого zip-файла лежит в той же директории под названием certificate_bundle_example.zip
Содержимое zip файла:
├── certificate.cer - файл сертификата
└── le-09650.000 - каталог с файлами закрытого ключа
├── header.key
├── masks2.key
├── masks.key
├── name.key
├── primary2.key
└── primary.key
Первый найденный файл в корне архива будет воспринят как сертификат, а первый найденный каталог - как связка файлов закрытого ключа. Пароль от контейнера, если есть, передается аргументом CERTIFICATE_PIN
- Скачать КриптоПро CSP 4.0 для Linux (x64, deb) и положить по пути
install/linux-amd64_deb.tgz
- Подложить архив с сертификатом как
/cryptopro/certificates/certificate_bundle.zip
- Создаем образ
docker build --tag cryptopro-sign --build-arg CERTIFICATE_PIN=12345678 .
- Запускаем
docker run -it --rm -p 3037:3037 --name cryptopro-sign cryptopro-sign
Если следовать инструкции выше, то свагер будет находиться по адресу http://localhost:3037/docs/#/
Там же есть примеры вызова методов.
Доступные методы:
POST /cryptopro/sign
- подписать текст
- Запустить докер контейнер по инструкции выше
- Заходим в запущенный контейнер
docker exec -ti cryptopro-sign sh
- Создаем запрос на сертификат
cryptcp -creatrqst -dn 'cn=test' -cont '\\.\hdimage\test2' -pin 12345678 tmp/test.csr
(попросит понажимать разные клавиши) - Выводим результат
cat /tmp/test.csr
- Заходим на
http://www.cryptopro.ru/certsrv/certrqxt.asp
и вставляем вывод - В следующем окне выбираем
Base64-шифрование
иСкачать сертификат
- Качаем и сохраняем
certnew.cer
файл в проекте по путиcryptopro/certificates/certnew.cer
- В отдельном терминале переносим файл в запущенный контейнер
docker cp cryptopro/certificates/certnew.cer cryptopro-sign:tmp/test.cer
- Возвращаемся в первый терминал и загружаем сертификат в КриптоПро
cryptcp -instcert -cont '\\.\hdimage\test2' tmp/test.cer
- Попросит ввести пароль. Вводим
12345678
- Переносим на нашу машину приватные ключи
docker cp cryptopro-sign:var/opt/cprocsp/keys/root/test2.000 cryptopro/certificates/test2.000
- В папке проекта
cryptopro/certificates
создаем архив. В архив кладем папкуtest2.000
и файлcertnew.cer
- Архив называем
certificate_bundle.zip
, пересобираем докер образ и запускаем.
Черпал вдохновение и взял многие вещи из этого репозитория
Для использования в продакшене лучше, чтобы сервис был не доступен снаружи инфраструктуры, т.к тут через рест можно что угодно подписать зашитым сертификатом. Если все же инфраструктура открытая, то в сервис следует встроить проверку авторизации.
Если получаете код ошибки 0x80090010
при вызове метода sign - вероятно срок действия вашего сертификата истек. Попробуйте создать новый по инструкции.
PORT - numer. Порт рест сервера. Дефолт: 3037