Инструкции по установке#
- Требования к системе
- Технологический стек
- Установка и настройка
- Доступ к сервису
- Проверка работы сервиса
- Установка корневого сертификата
- Установка сертификата пользователя
- Подпись
Требования к системе#
Характеристика | Минимальное значение | Дополнение |
---|---|---|
Информационная емкость ОЗУ | 4 Гб | |
Информационная емкость HDD | 50 Гб | |
Процессор | x86_64 (или amd64) | |
Поддерживаемые ОС | Ubuntu 18.04 LTS (Bionic Beaver), Ubuntu 20.04 LTS (Focal Fossa), Debian 11 (Bullseye), Astra Linux CE 2.12.45 (Orel) | Другие Linux дистрибутивы, поддерживающие запуск Docker |
Дополнительно | Средство автоматизации развертывания и контейнеризации Docker |
Технологический стек#
Node.js, NestJS, КриптоПро CSP 5.0, КриптоАРМ ГОСТ SDK, Docker
Установка и настройка#
1. Установка Docker#
Для установки проекта необходимо установить docker и docker-compose.
🔍 Подробное руководство по установке docker и docker-compose представлено на странице официальной документации проекта docs.docker.com.
💡 Минимально необходимые версии компонентов Docker Engine 19.03 +.
2. Развертывание сервиса#
-
Скачайте архив server-docker.zip с дистрибутивом программного продукта.
-
Распакуйте скаченный архив
-
Войдите в каталог server-docker:
-
Скачайте КриптоПро CSP 5.0 для Linux (x64, deb) linux-amd64_deb.tgz в каталог cryptopro. Для скачивания требуется пройти авторизацию на сайте КриптоПро.
sh server-docker/cryptopro/linux-amd64_deb.tgz
-
Отредактируйте настройки конфигурации:
- Откройте на редактирование файл .env;
- Задайте серверную лицензию КриптоПро CSP в переменной
CRYPTOPRO_LICENSE
CRYPTOPRO_LICENSE=XXXXXXXXXXXXXXXXXXXXXXXXX
- Задайте лицензию КриптоАРМ Server в переменной
TRUSTED_LICENSE
TRUSTED_LICENSE=XXXXX-XXXXX-XXXXX-XXXXX-XXXXX-XXXXX-XXXXX
-
Запустите сборку проекта:
docker compose build --pull
-
Запустите проект:
docker compose up -d
Просмотреть логи:
docker compose logs -f
Остановить проект:
docker compose stop
Доступ к сервису#
-
Для входа в web интерфейс сервиса необходимо перейти по адресу
http://SERVER:PORT
:Пример:
http://172.17.1.115:3037
-
Swagger документация по REST API доступна по адресу
http://SERVER:PORT/docs
:Пример:
http://172.17.1.115:3037/docs
Проверка работы сервиса#
Проверить работу сервиса можно следующими способами:
- С помощью Swagger документации
http://SERVER:PORT/docs
-
С помощью утилиты
curl
:curl -X 'POST' \ 'http://172.17.1.115:3037/cms/verify' \ -H 'accept: application/json' \ -H 'Content-Type: application/json' \ -d '{ "cms": "MIAGCSqGSIb3...==,MSMwIQYJKoZI...==", "data": "dGVzdA==", "enhancedType": "CAdES-X Long Type 1" }'
В запросе передаются следующие параметры:
-cms
: открепленная (либо прикрепленная) подпись, закодированная в Base64 -data
: подписанные данные в формате Base64 (для открепленной подписи) -enhancedType
: формат улучшения подписи (CAdES-T|CAdES-X Long Type 1|CAdES-A)
Пример ответа:
HTTP/1.1 201 Created
Vary: Origin
Access-Control-Allow-Credentials: true
Content-Type: application/json; charset=utf-8
Content-Length: 136101
ETag: W/"213a5-+1/6qQ+hWCfJ0yGRz0/fQGpbTbk"
Date: Thu, 26 Sep 2024 12:40:04 GMT
Connection: keep-alive
Keep-Alive: timeout=5
{
"status": 200,
"message":"ОК",
"isValid": true,
"isValidSign": true,
"signs": [
{
"cadesTypeName": "CAdES-BES",
"certificate": {
"version": 3,
"status": true,
"subjectFriendlyName": "esia test3",
"issuerFriendlyName": "CRYPTO-PRO Test Center 2",
"subjectName": "CN=esia test3",
"issuerName": "E=support@cryptopro.ru\r\nC=RU\r\nL=Moscow\r\nO=CRYPTO-PRO LLC\r\nCN=CRYPTO-PRO Test Center 2",
"notAfter": "2024-10-26T16:25:37.000Z",
"notBefore": "2024-08-26T16:15:37.000Z",
"serialNumber": "120064ECE1352507757C00A08B00020064ECE1",
"thumbprint": "29063cd83537dbbd0a221705859b8f6e5bec5ad0",
"signatureAlgorithm": "1.2.643.7.1.1.3.2",
"signatureDigestAlgorithm": "1.2.643.7.1.1.2.2",
"publicKeyAlgorithm": "1.2.643.7.1.1.1.1"
},
"certificateData": "MIIDEz...",
"issuerName": "E=support@cryptopro.ru, C=RU, L=Moscow, O=CRYPTO-PRO LLC, CN=CRYPTO-PRO Test Center 2",
"serialNumber": "120064ECE1352507757C00A08B00020064ECE1",
"signatureAlgorithm": "1.2.643.7.1.1.3.2",
"signatureDigestAlgorithm": "1.2.643.7.1.1.2.2",
"certs": [
{
"status": true,
"subjectFriendlyName": "esia test3",
"issuerFriendlyName": "CRYPTO-PRO Test Center 2",
"subjectName": "CN=esia test3",
"issuerName": "E=support@cryptopro.ru\r\nC=RU\r\nL=Moscow\r\nO=CRYPTO-PRO LLC\r\nCN=CRYPTO-PRO Test Center 2",
"notAfter": "2024-10-26T16:25:37.000Z",
"notBefore": "2024-08-26T16:15:37.000Z",
"serialNumber": "120064ECE1352507757C00A08B00020064ECE1",
"thumbprint": "29063cd83537dbbd0a221705859b8f6e5bec5ad0",
"signatureAlgorithm": "1.2.643.7.1.1.3.2",
"signatureDigestAlgorithm": "1.2.643.7.1.1.2.2",
"publicKeyAlgorithm": "1.2.643.7.1.1.1.1"
}
],
"isCertChainValid": true
}
],
"data": "JVBERi0xLjQKJdPr...=",
"dataStamp": "JVBERi0xLjcKJ...=",
"report": "JVBERi0xLjcKJ...="
}
Атрибуты ответа:
status
: Http статусmessage
: Если произойдет ошибка, то причина ошибки будет указана здесьisValid
: Общий результат проверкиisValidSign
: Результат математической корректности подписиsigns
: Информация о сертификатахdata
: Подписанные данные в формате Base64dataStamp
: Подписанные данные с визуализацией штампов подписей в формате Base64 (для PDF документов)report
: PDF-отчет проверки в формате Base64
Пример неуспешного ответа:
HTTP/1.1 400 Bad Request
Vary: Origin
Access-Control-Allow-Credentials: true
Content-Type: application/json; charset=utf-8
Content-Length: 101
ETag: W/"65-ykHUL2wV5KLzsDntQL70C94heK8"
Date: Thu, 26 Sep 2024 12:42:04 GMT
Connection: keep-alive
Keep-Alive: timeout=5
{
"message": "Запрошена проверка прикрепленной CMS подписи, но подпись не содержит исходного документа",
"error": "Bad Request",
"statusCode": 400
}
Установка корневого сертификата#
docker exec -it cryptoarm.server /opt/cprocsp/bin/amd64/certmgr -inst -all -store uroot -file /certs/crypto_test.cer
Установка сертификата пользователя#
docker exec -it cryptoarm.server /opt/cprocsp/bin/amd64/certmgr -inst -all -store uMy -file /certs/test.pfx -pfx
Подпись#
curl -X 'POST' \
'http://172.17.1.115:3037/cms/sign' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-d '{
"cert": "MIIDEjCCAr+gAwI...==",
"data": "dGVzdA==",
"password": "password"
}'
В запросе передаются следующие параметры:
cert
: cертификат подписчика в формате Base64data
: подписываемые данные в формате Base64password
: пароль от ключевого контейнера (при необходимости)
Пример ответа:
HTTP/1.1 201 Created
Vary: Origin
Access-Control-Allow-Credentials: true
Content-Type: application/json; charset=utf-8
Content-Length: 1478
ETag: W/"5c6-OiZeKxed1tGRHIj2Bv0IrvOzso0"
Date: Tue,18 Feb 2025 15:54:00 GMT
Connection: keep-alive
Keep-Alive: timeout=5
{
"cms": "MIAGCSqGSIb3DQEHAq...AAAAAAAA"
}
Атрибуты ответа:
cms
: отсоединенная подпись PKCS7 в формате Base64