Настройка веб-сервера
Внимание!
Перед выполнением данного этапа необходимо выполнить подготовительный этап, установить КриптоПро Ключ и дополнительное ПО, настроить подключение к КриптоПро HSM или тестовому считывателю, развернуть необходимые компоненты КриптоПро Ключ.
Примечание
Настройки для веб-сервера cpnginx аналогичны настройке nginx, поэтому в данном разделе указаны только детали, необходимые для минимальной настройки веб-сервера для работы с Ключ Lite.
Подготовка сертификатов веб-сервера
1. Установка сертификата веб-сервера (для основных компонентов КриптоПро Ключ и Сервиса взаимодействия с SDK)
Установка сертификата возможна двумя способами:
- Установка сертификата из pfx. В этом варианте сертификат веб-сервера должен быть получен заранее в УЦ и скопирован на серверы с компонентами КриптоПро Ключ в виде pfx-контейнера.
sudo -u cpnginx /opt/cprocsp/bin/amd64/certmgr -install -pfx -store uMy -file /<path>/certificate.pfx -pin <пароль от файла pfx>
- Получение сертификата на УЦ оффлайн. В этом варианте запрос на сертификат и ключ создаются на серверах КриптоПро Ключ с помощью команды, где для параметра
altname
укажите DNS-имя кластера КриптоПро Ключ:
sudo -u cpnginx /opt/cprocsp/bin/amd64/cryptcp -creatrqst -provtype 80 -rdn "CN=Веб-сертификат" -altname "<DNS-name>" -both -certusage "1.3.6.1.5.5.7.3.1" -cont "cont_name" -exprt /tmp/web1.req
Файл запроса на сертификат необходимо передать в УЦ для выпуска сертификата. Выпущенный сертификат необходимо скопировать на сервер в виде cer- или p7b-файла и установить следующим образом:
sudo -u cpnginx /opt/cprocsp/bin/amd64/certmgr -install -file /tmp/web.cer -cont web -provtype 80 -provname "Crypto-Pro GOST R 34.10-2012 KC2 CSP"
- Опционально (в случае использования RSA-сертификатов): установите RSA-сертификат веб-сервера, с привязкой к закрытому ключу в хранилище пользователя cpnginx:
sudo -u cpnginx /opt/cprocsp/bin/amd64/certmgr -install -provtype 24 -file <key.pfx> -pfx -pin <pfx_pin> -store umy
2. Установите цепочку сертификатов издателей сертификатов веб-сервера:
#Вариант №1 – установка в хранилища пользователя nginx
#Корневой сертификат
sudo -u cpnginx /opt/cprocsp/bin/amd64/certmgr -install -file <root.cer> -store uroot
#Промежуточный
sudo -u cpnginx /opt/cprocsp/bin/amd64/certmgr -install -file <ca.cer> -store uca
#Вариант №2 – установка в локальные хранилища
#Корневой сертификат
sudo /opt/cprocsp/bin/amd64/certmgr -install -file <root.cer> -store mroot
#Промежуточный
sudo /opt/cprocsp/bin/amd64/certmgr -install -file <ca.cer> -store mca
3. Если нет доступа к CRL по сети, также установите их в хранилище mCA
sudo /opt/cprocsp/bin/amd64/certmgr -install -crl -store mca -file «CRL»
4. (В случае размещения компонентов в кластере
) Запросите серийные номера сертификатов веб-сервера и экспортируйте сертификат вместе с ЗК на другие узлы кластера:
sudo -u cpnginx /opt/cprocsp/bin/amd64/certmgr -list
sudo -u cpnginx /opt/cprocsp/bin/amd64/certmgr -export -pfx -pin "1" -thumbprint <отпечаток сертификата> -dest /tmp/web.pfx
Сертификат веб-сервера для Сервиса взаимодействия с SDK
Внимание!
Сертификат веб-сервера, на котором разворачивается Сервис взаимодействия с SDK, должен удовлетворять следующим требованиям:
- подписан с использованием алгоритма, определенного в ГОСТ Р 34.10-2012;
- содержит расширение Extended Key Usage со значением проверки подлинности сервера;
- содержит расширение Subject Alternative Name с указанием адреса сервера, на котором разворачивается mDAG.
- корневой сертификат для данного сертификата должен быть установлен в мобильном приложении, обращающемся к сервису.
(данное условие уже считается выполненным, если сертификат выдан аккредитованным УЦ либо УЦ
https://tlsca.cryptopro.ru/tls-center.htm
, а вызывающим приложением является приложение с Ключ SDK).
Создание и установка самоподписанного сертификата веб-сервера в тестовых целях
В случае если необходимо быстро развернуть КриптоПро Ключ в тестовых целях, можно использовать самоподписанный сертификат веб-сервера.
Примеры команд, приведенные в данном разделе, позволяют создать сертификат с общим и
альтернативным именем testcert
,
расположенный в директории /opt/tmp/web.cer
, после чего установить его в хранилище mroot
.
# Создание сертификата
sudo -u cpnginx /opt/cprocsp/bin/amd64/csptest -minica -root -dn "CN=testcert" -provtype 80 -provider "Crypto-Pro GOST R 34.10-2012 Cryptographic Service Provider" -container "web" -fcert /opt/tmp/web.cer -keytype exchange -certusage "1.3.6.1.5.5.7.3.1" -altname "testlitecert" -store uMy -exportable -until 365
# Установка сертификата
sudo /opt/cprocsp/bin/amd64/certmgr -install -certificate -file /opt/tmp/web.cer -store mroot
Настройка конфигурации веб-сервера
После разворачивания экземпляров сервисов СЭП для каждого из них доступен конфигурационный
файл nginx.conf
, расположенный в следующей папке:
/etc/opt/cprokey/{{Имя сервиса}}/{{Имя экземпляра сервиса при создании}}/nginx.conf
Данные файлы содержат базовые адреса сервисов и порты, которые каждый из сервисов слушает. По умолчанию сервисы слушают первый свободный порт в следующих диапазонах:
Сервис | Имя сервиса | Диапазон портов |
---|---|---|
Сервис Подписи | signsrv | 51000-51999 |
Центр Идентификации | idsrv | 50000-50999 |
Сервис Обработки Документов | docsrv | 52000-52999 |
Сервис Аудита | auditsrv | 55000-55999 |
Сервис взаимодействия с SDK | mdagsrv | 58000-58999 |
Сервис PUSH-уведомлений | pushsrv | 56000-56999 |
Для настройки основной конфигурации веб-сервера файлы nginx.conf сервисов необходимо включить в основную конфигурацию cpnginx, расположенную в следующей папке:
"/etc/opt/cprocsp/cpnginx/cpnginx.conf"
1. Откройте конфигурационный файл nginx:
sudo nano /etc/opt/cprocsp/cpnginx/cpnginx.conf
2. Скорректируйте содержимое конфигурационного файла в соответствии с нижеприведенным примером:
- для каждой секции
server
(три секции с портами 443, 4430 и 80) для параметраserver_name
укажите Ваше DNS-имя сервера КриптоПро Ключ или его кластера; - для каждой секции
server
(две секции с портами 443, 4430) для параметраsspi_certificate
укажите серийный номер сертификата веб-сервера.
Примечание
DNS-имя веб-сервера в секции server_name
должно совпадать с alternative subject name сертификата веб-сервера.
Для того чтобы настроить размер передаваемых файлов, необходимо использовать параметр client_max_body_size
,
который может быть размещен в нужном контексте (http, server, location) в зависимости от потребностей вашего веб-сервера. Рекомендуется
устанавливать соответствие с настройками конечных точек сервисов (по умолчанию ~30 МБ).
client_max_body_size 30m; #Максимальный размер запроса от клиента 30 МБайт
Пример файла cpnginx.conf
:
user cpnginx;
worker_processes auto;
error_log /var/log/cpnginx/error.log notice;
pid /var/run/cpnginx.pid;
worker_rlimit_nofile 8192;
events {
worker_connections 4096;
}
http {
include /etc/opt/cprocsp/cpnginx/mime.types;
default_type text/html;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/cpnginx/access.log main;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
gzip on;
client_max_body_size 30m; #Максимальный размер запроса от клиента
large_client_header_buffers 4 12k; #Максимальное число и размер буферов для чтения большого заголовка запроса клиента
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
# HTTPS, 443, 1-TLS GOST
server {
listen 443 sspi;
server_name dns-name;
#Публикация СМС в папку (опционально, если необходима настройка SMS-оповещения в тестовом режиме)
location /fakesms {
root /opt/tmp;
autoindex on;
charset utf-8;
}
include /etc/opt/cprokey/idsrv/STS/nginx.conf;
include /etc/opt/cprokey/signsrv/SignServer/nginx.conf;
include /etc/opt/cprokey/auditsrv/AnalyticsService/nginx.conf;
include /etc/opt/cprokey/fesrv/Frontend/nginx.conf;
include /etc/opt/cprokey/docsrv/DocumentStore/nginx.conf;
include /etc/opt/cprosvs/vssrv/vs/nginx.conf;
include /etc/opt/cprosvs/vsfe/verify/nginx.conf;
#include /etc/opt/cprosvs/cdsrv/cd/nginx.conf;
#include /etc/opt/cprosvs/cdfe/certdirectory/nginx.conf;
sspi_certificate <serial_number>; #Серийный номер ГОСТ-сертификата веб-сервера
#sspi_certificate <serial_number>; #Опционально, серийный номер RSA-сертификата веб-сервера
sspi_protocols TLSv1 TLSv1.1 TLSv1.2;
sspi_verify_client off;
}
# HTTPS, 2-TLS GOST - выделенный порт для обеспечения аутентификации по сертификату Операторов и Пользователей, указанный на этапе настройки Центра Идентификации
server {
listen 4430 sspi;
server_name dns-name;
include /etc/opt/cprokey/idsrv/STS/nginx.conf;
sspi_certificate <serial_number>; #Серийный номер ГОСТ-сертификата веб-сервера
#sspi_certificate <serial_number>; #Опционально, серийный номер RSA-сертификата веб-сервера
sspi_protocols TLSv1 TLSv1.1 TLSv1.2;
sspi_verify_client on;
sspi_client_certificate root;
}
# HTTP, 80 - необходим, т.к. межсервисное взаимодействие "КриптоПро Ключ" осуществляется по незащищенному соединению
server {
listen 80;
server_name dns-name;
#Публикация фейковых СМС (опционально, если необходима настройка SMS-оповещения в тестовом режиме)
location /fakesms {
root /opt/tmp;
autoindex on;
charset utf-8;
}
include /etc/opt/cprokey/idsrv/STS/nginx.conf;
include /etc/opt/cprokey/signsrv/SignServer/nginx.conf;
include /etc/opt/cprokey/auditsrv/AnalyticsService/nginx.conf;
include /etc/opt/cprokey/fesrv/Frontend/nginx.conf;
include /etc/opt/cprokey/docsrv/DocumentStore/nginx.conf;
include /etc/opt/cprosvs/vssrv/vs/nginx.conf;
include /etc/opt/cprosvs/vsfe/verify/nginx.conf;
#include /etc/opt/cprosvs/cdsrv/cd/nginx.conf;
#include /etc/opt/cprosvs/cdfe/certdirectory/nginx.conf;
}
# HTTPS, 1TLS GOST - выделенный порт 4431, указанный на этапе настройки mDAG
server {
listen 4431 sspi;
server_name dns-name;
include /etc/opt/cprokey/mdagsrv/cprokey/nginx.conf;
include /etc/opt/cprokey/mdagsrv/cryptokey/nginx.conf;
sspi_certificate <serial_number>; #Серийный номер сертификата веб-сервера, выданного УЦ TLS CA
sspi_protocols TLSv1 TLSv1.1 TLSv1.2;
sspi_verify_client off;
}
}
После модификации файла необходимо перезапустить сервис веб-сервера либо активировать его (если сервис настраивался впервые).
# Перезапуск сервиса
sudo systemctl restart cpnginx.service
# Активация сервиса (если настраивался впервые)
sudo systemctl enable --now cpnginx.service
Рекомендуется настроить отложенный запуск службы cpnginx после службы cprocsp. Для этого откройте конфигурационный файл службы cpnginx:
sudo systemctl edit cpnginx
Укажите в открывшемся файле:
[Unit]
After=cprocsp.service
Requires=cprocsp.service
Примечание
Выполнять данный пункт не нужно, если был установлен сервис cprocsp, соответствующий требованиям КС2.
Сохраните изменения.