Установка и запуск КриптоАРМ Gate#
В этой инструкции вы узнаете как установить и настроить сервис КриптоАРМ Gate с использованием Docker.
Содержание:
Условия применения#
Требования для установки и настройки#
| Характеристика | Минимальное значение | Дополнение |
|---|---|---|
| ОЗУ | 4 ГБ | |
| HDD | 10 ГБ | |
| Процессор | x86_64 (amd64) | |
| Поддерживаемые ОС | Ubuntu 18.04/20.04, Debian 11, Astra Linux SE 1.8 Орел | Поддерживаются другие Linux-дистрибутивы с поддержкой Docker |
| Дополнительно | Docker | Средство автоматизации развертывания и контейнеризации |
Используемый стек технологий#
Apache 2.4, КриптоПро CSP 5.0 (mod_ssl), Docker. Опционально: модуль КриптоАРМ OIDC-mTLS (для проверки квалифицированности сертификата).
Установка#
Установка Docker и Docker Compose#
Для запуска проекта необходимы Docker и Docker Compose.
Инструкции: официальная документация Docker.
Минимальные версии: - Docker Engine: 20.10 или выше (для работы Docker Compose v2) - Docker Compose: 2.x (плагин docker compose или отдельная установка)
Установка и первый запуск#
- Создайте и перейдите в рабочую директорию:
- Загрузите конфигурационные файлы:
curl -O https://git.digtlab.ru/trusted/cryptoarm/gate/-/raw/main/docker-compose.yml
curl -O https://git.digtlab.ru/trusted/cryptoarm/gate/-/raw/main/Dockerfile
curl -O https://git.digtlab.ru/trusted/cryptoarm/gate/-/raw/main/.env
curl -O https://git.digtlab.ru/trusted/cryptoarm/gate/-/raw/main/entrypoint.sh
- Создайте необходимые директории и загрузите конфигурацию сайта:
mkdir -p cryptopro certs/gost certs/rsa certs/root conf html logs
curl -o conf/ssl.conf https://git.digtlab.ru/trusted/cryptoarm/gate/-/raw/main/conf/ssl.conf
-
Скачайте актуальную версию КриптоПро CSP 5.0 для Linux (x64, deb) и поместите архив
linux-amd64_deb.tgzв каталогcryptoarm-gate/cryptopro/.
Для скачивания требуется авторизация на сайте КриптоПро. -
Отредактируйте настройки в файле .env:
CRYPTO_PRO_LICENSE— серверная лицензия КриптоПро CSP (при необходимости).-
При использовании бэкенда укажите его адрес в конфигурации Apache (см. Проксирование на бэкенд).
-
Разместите сертификаты сервера в соответствующих каталогах (см. Сертификаты; для теста можно скачать примеры из репозитория командами
curl, указанными в этом разделе). -
Запустите сборку и сервис:
Дополнительно: - Просмотр логов: docker compose logs -f - Остановка: docker compose stop - Обновление до актуальной версии: повторите п. 2, затем docker compose build --pull и docker compose up -d
Сборка на базе Astra Linux#
Для развёртывания в средах, где предъявляются требования к использованию ОС Astra Linux, предусмотрена сборка образа на базе универсального базового образа (UBI) Astra Linux.
- Загрузите файл сборки для Astra Linux (в дополнение к п. 2 раздела Установка и первый запуск):
-
Убедитесь, что в каталоге есть все артефакты:
docker-compose.yml,.env,entrypoint.sh, каталогcryptopro/с архивом КриптоПро CSP, при необходимостиconf/ssl.confи сертификаты. -
Соберите образ с использованием Dockerfile для Astra Linux (базовый образ — Astra Linux SE, реестр registry.astralinux.ru). При необходимости замените тег базового образа в
Dockerfile.astralinuxна актуальный из вашего реестра:
- Запустите сервис так же, как при сборке на Ubuntu — через Docker Compose (образ уже собран под именем
cryptoarm.gate):
Состав установленного ПО (Apache 2.4, КриптоПро CSP, mod_ssl, entrypoint) совпадает с вариантом на базе Ubuntu; отличается только базовый слой ОС. Остальные шаги настройки (сертификаты, mTLS, проксирование) выполняются так же, как описано в разделах Настройка и Проверка работы.
Настройка#
Сертификаты#
- ГОСТ (обязательно): серверные сертификаты в
certs/gost/(например,localhost.cer,localhost.pfx). Используются для HTTPS и для приёма клиентских ГОСТ-сертификатов при mTLS. - RSA (опционально): серверные сертификаты в
certs/rsa/(например,localhost.cer,localhost.pfx). Подключаются только если нужно поднять один веб-ресурс одновременно по ГОСТ и по RSA (совместимость с клиентами без поддержки ГОСТ). Вход по сертификату и mTLS при этом выполняются только по ГОСТ. - Корневые и доверенные CA: в
certs/root/(файлы.cer) — для проверки клиентских ГОСТ-сертификатов при mTLS. При старте контейнера устанавливаются в хранилище КриптоПро.
В качестве примеров для тестирования можно скачать сертификаты из репозитория:
mkdir -p certs/gost certs/rsa certs/root
curl -o certs/gost/localhost.cer https://git.digtlab.ru/trusted/cryptoarm/gate/-/raw/main/certs/gost/localhost.cer
curl -o certs/gost/localhost.pfx https://git.digtlab.ru/trusted/cryptoarm/gate/-/raw/main/certs/gost/localhost.pfx
curl -o certs/rsa/localhost.cer https://git.digtlab.ru/trusted/cryptoarm/gate/-/raw/main/certs/rsa/localhost.cer
curl -o certs/rsa/localhost.pfx https://git.digtlab.ru/trusted/cryptoarm/gate/-/raw/main/certs/rsa/localhost.pfx
curl -o certs/root/cryptopro_test.cer https://git.digtlab.ru/trusted/cryptoarm/gate/-/raw/main/certs/root/cryptopro_test.cer
Внимание: примеры предназначены только для проверки развёртывания и тестовых сценариев. В продуктивной среде используйте собственные сертификаты и корневые CA.
Конфигурация SSL задаётся в conf/ssl.conf, монтируемом в контейнер.
Режим mTLS и OIDC#
Вход по сертификату и допуск к защищённым ресурсам выполняются по ГОСТ-сертификату клиента. В конфигурации Apache включают проверку клиентского сертификата и передачу его данных бэкенду:
- В
conf/ssl.confраскомментируйтеSSLVerifyClient requireпри необходимости обязательной проверки клиентского сертификата (принимаются только ГОСТ-сертификаты, настроенные в КриптоПро). - Раскомментируйте блоки
RequestHeader set X-SSL-Client-*, чтобы передавать в бэкенд атрибуты предъявленного сертификата: X-SSL-Client-Verify,X-SSL-Client-DN,X-SSL-Client-Serial,X-SSL-Client-Issuer,X-SSL-Client-Cert,X-SSL-Client-S-DN-CN,X-SSL-Client-I-DN-CN.
Проверка квалифицированности предъявленного ГОСТ-сертификата выполняется с привлечением модуля КриптоАРМ OIDC-mTLS: GATE передаёт данные подписи/сертификата в API модуля; по результату проверки принимается решение о допуске пользователя для OIDC-входа.
Переменные mTLS и заголовки для бэкенда#
При успешной проверке клиентского ГОСТ-сертификата Apache (mod_ssl) устанавливает переменные окружения SSL_CLIENT_* и при включённых RequestHeader передаёт их бэкенду в HTTP-заголовках X-SSL-Client-*. Ниже — пример значений (из SSI, например index.shtml).
Переменные сертификата клиента (mTLS):
| Переменная / заголовок | Описание | Пример значения |
|---|---|---|
SSL_CLIENT_VERIFY / X-SSL-Client-Verify | Результат проверки клиентского сертификата | SUCCESS |
SSL_CLIENT_S_DN_CN / X-SSL-Client-S-DN-CN | Common Name субъекта сертификата | TEST_КРИПТОАРМ |
SSL_CLIENT_I_DN_CN / X-SSL-Client-I-DN-CN | Common Name издателя (УЦ) | Тестовый УЦ ООО "КРИПТО-ПРО" |
SSL_CLIENT_S_DN / X-SSL-Client-DN | Distinguished Name субъекта | CN=TEST_КРИПТОАРМ |
SSL_CLIENT_I_DN / X-SSL-Client-Issuer | DN издателя | CN=Тестовый УЦ ООО "КРИПТО-ПРО",O=ООО "КРИПТО-ПРО",L=Москва,ST=г. Москва,C=RU,... |
SSL_CLIENT_M_SERIAL / X-SSL-Client-Serial | Серийный номер сертификата | 7C002E6AAA722B2E8F1A3D81930012002E6AAA |
SSL_CLIENT_CERT / X-SSL-Client-Cert | Сертификат клиента (PEM) | -----BEGIN CERTIFICATE----- ... -----END CERTIFICATE----- |
SSL_CLIENT_A_KEY | Алгоритм ключа | GOST R 34.10-2012 with 256 bit modulus |
SSL_CLIENT_A_SIG | Алгоритм подписи | GOST R 34.10-2012 with GOST R 34.11-2012 (256 bit) |
SSL_CLIENT_V_START / SSL_CLIENT_V_END | Срок действия сертификата | Feb 13 08:58:40 2026 GMT … Apr 13 09:08:40 2026 GMT |
Дополнительные переменные SSL (только на стороне GATE, в SSI/скриптах):
HTTPS=on
SSL_PROTOCOL=TLSv1.2
SSL_CLIENT_I_DN_C=RU
SSL_CLIENT_I_DN_ST=г. Москва
SSL_CLIENT_I_DN_L=Москва
SSL_CLIENT_I_DN_O=ООО "КРИПТО-ПРО"
SSL_CLIENT_I_DN_CN=Тестовый УЦ ООО "КРИПТО-ПРО"
SSL_VERSION_INTERFACE=mod_ssl/2.4.41
SSL_VERSION_LIBRARY=OpenSSL/1.1.1f
Бэкенд (OIDC-провайдер и др.) при проксировании получает заголовки HTTP_X_SSL_CLIENT_VERIFY, HTTP_X_SSL_CLIENT_DN, HTTP_X_SSL_CLIENT_SERIAL, HTTP_X_SSL_CLIENT_ISSUER, HTTP_X_SSL_CLIENT_CERT, HTTP_X_SSL_CLIENT_S_DN_CN, HTTP_X_SSL_CLIENT_I_DN_CN (префикс HTTP_ и замена - на _ задаются правилами сервера/приложения).
Проксирование на бэкенд#
В conf/ssl.conf задаётся проксирование на внутренний бэкенд (в т.ч. OIDC-провайдер):
Измените http://backend/ на фактический адрес бэкенда (в Docker Compose — имя сервиса и порт, например http://cryptoarm-id-back:3005/).
Пример бэкенда для проверки. В docker-compose.yml можно использовать тестовый бэкенд kennethreitz/httpbin: он возвращает в ответе все заголовки запроса, в том числе переданные GATE заголовки mTLS (X-Ssl-Client-*). Сервис уже описан в составе проекта:
После запуска docker compose up -d запрос к https://SERVER:4443/api/headers (с предъявлением ГОСТ-сертификата при включённом mTLS) вернёт JSON с заголовками, среди которых будут X-Ssl-Client-Verify, X-Ssl-Client-Dn, X-Ssl-Client-Serial, X-Ssl-Client-Issuer, X-Ssl-Client-Cert, X-Ssl-Client-S-Dn-Cn, X-Ssl-Client-I-Dn-Cn и др.
Проверка работы#
- Доступ по HTTPS (порт 4443 по умолчанию):
https://SERVER:4443 - Статическая раздача из
/var/www/html(монтируется изhtml/). - Проксирование запросов по путям, указанным в
ProxyPass(например,/api), на бэкенд.
Проверка mTLS и передачи данных сертификата бэкенду. Подключитесь к GATE с клиентским ГОСТ-сертификатом и выполните запрос к примеру бэкенда (httpbin):
В ответе (JSON) в объекте headers будут переданные GATE заголовки, например:
{
"headers": {
"Host": "172.17.1.115:14443",
"X-Forwarded-Host": "172.17.1.115:14443",
"X-Ssl-Client-Verify": "SUCCESS",
"X-Ssl-Client-Dn": "CN=TEST_КРИПТОАРМ",
"X-Ssl-Client-S-Dn-Cn": "TEST_КРИПТОАРМ",
"X-Ssl-Client-I-Dn-Cn": "Тестовый УЦ ООО \"КРИПТО-ПРО\"",
"X-Ssl-Client-Serial": "7C002E6AAA722B2E8F1A3D81930012002E6AAA",
"X-Ssl-Client-Issuer": "CN=Тестовый УЦ ООО \"КРИПТО-ПРО\",O=ООО \"КРИПТО-ПРО\",L=Москва,ST=г. Москва,C=RU,...",
"X-Ssl-Client-Cert": "-----BEGIN CERTIFICATE----- MIIE5DCCBJGgAwIBAgITfAAuaqpy ... -----END CERTIFICATE-----"
}
}
По наличию и значениям этих заголовков можно убедиться, что бэкенд получает данные клиентского сертификата для OIDC-входа по сертификату.