From 3e15adb26567d92e94256696e8f58fd190ae3f02 Mon Sep 17 00:00:00 2001 From: alashkova Date: Wed, 16 Oct 2024 16:14:34 +0300 Subject: [PATCH] =?UTF-8?q?SUPPORT-8592.=20=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D1=8B=20README=20=D0=B8=20=D0=98=D0=BD=D1=81?= =?UTF-8?q?=D1=82=D1=80=D1=83=D0=BA=D1=86=D0=B8=D1=8F=20=D0=BF=D0=BE=20?= =?UTF-8?q?=D1=83=D1=81=D1=82=D0=B0=D0=BD=D0=BE=D0=B2=D0=BA=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 38 +++++++++++++++++++++++++++++++++++++- Инструкция по установке.md | 28 +++++++++++++++++++++++----- 2 files changed, 60 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index c39f2d9..747c3ac 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,10 @@ ## Краткое описание -Модуль предназначен для подписи данных. +В модуле реализованы следующие функции: +- подпись данных +- проверка подписи маркера доступа + +### Подпись данных Приложение принимает POST-запрос по протоколу FastCGI (Content-Type: text/plain). Подписывает строку, полученную в теле запроса. @@ -28,6 +32,35 @@ $ curl -v http://127.0.0.1:8080/sign -H "Content-Type: text/plain" -d "test" urlSafeBase64_of_signed_string_test ``` +### Проверка подписи маркера доступа + +Приложение принимает POST-запрос по протоколу FastCGI (Content-Type: text/plain). +Проверяет подпись маркера доступа, полученного в теле запроса. +В ответе возвращает один из следующих статус-кодов: +- 200 OK - подпись валидна +- 401 Unauthorized - подпись невалидна (в теле ответа возвращается код ошибки от криптопровайдера) +- 500 Internal Server Error - внутренняя ошибка сервера + +Пример выполнения запроса: +``` +$ curl -v http://127.0.0.1:8080/verify -H "Content-Type: text/plain" -d "some_valid_access_token" +* Trying 127.0.0.1:8080... +* Connected to 127.0.0.1 (127.0.0.1) port 8080 +> POST /sign HTTP/1.1 +> Host: 127.0.0.1:8080 +> User-Agent: curl/8.4.0 +> Accept: */* +> Content-Type: text/plain +> Content-Length: 4 +> +< HTTP/1.1 200 OK +< Server: nginx/1.24.0 +< Date: Wed, 16 Oct 2024 09:55:46 GMT +< Transfer-Encoding: chunked +< Connection: keep-alive +< +``` + ## Сборка из исходников Инструкции по сборке из исходников см. "Инструкция по сборке.md" @@ -60,3 +93,6 @@ location = /sign *\# значение по умолчанию: /sign, должн signer_subject = signer@example.ru *\# email, ИНН, СНИЛС или любая другая строка из свойства контейнера «Субъект»* pin = \*\*\*\* *\# пароль от контейнера* +- В секции **\[verify\]** задать настройки проверки подписи маркера доступа: +location = /verify *\# значение по умолчанию: /verify, должно совпадать со значением в nginx.conf* +esia_cert_thumbprint = sha1thumbprint *\# SHA1 отпечаток сертификата ЕСИА* diff --git a/Инструкция по установке.md b/Инструкция по установке.md index ffeb33e..3d78b7e 100644 --- a/Инструкция по установке.md +++ b/Инструкция по установке.md @@ -24,9 +24,11 @@ cd - /opt/cprocsp/sbin/amd64/cpconfig -license -set "Номер" ``` -4. Запросить у руководителя проекта реестра повесток контейнер с ключом ИС, зарегистрированной в ЕСИА. +### Установка ключевой пары ИС, зарегистрированной в ЕСИА -5. Установить полученную ключевую пару для пользователя, от которого запускается модуль подписания (команды выполняются от имени **ervu**). +1. Запросить у руководителя проекта реестра повесток контейнер с ключом ИС, зарегистрированной в ЕСИА. + +2. Установить полученную ключевую пару для пользователя, от которого запускается модуль подписания (команды выполняются от имени **ervu**). Внимание! В следующих командах необходимо заменить ***key_cont.000*** на название контейнера, полученного на предыдущем шаге. ``` bash @@ -38,22 +40,38 @@ chown -R ervu:ervu /var/opt/cprocsp/keys/ervu/key_cont.000/ /opt/cprocsp/bin/amd64/csptest -absorb -certs -autoprov ``` -6. Получить перечень сертификатов: +3. Получить перечень сертификатов: ``` bash sudo -u ervu /opt/cprocsp/bin/amd64/certmgr -list ``` Получить следующие значения: - Поле "Субъект": любая подстрока из этого поля является signer_subject (нужно будет указать в конфигурационном файле модуля подписания) -- Поле "Ссылка на ключ": убедиться, что значение равно "Есть" (иначе проверьте выполнение предыдущих шагов) +- Поле "Ссылка на ключ": убедиться, что значение равно "Есть" (иначе необходимо проверить выполнение предыдущих шагов) -7. Сделать тестовую подпись с помощью установленного контейнера и полученных значений \ и \: +4. (опционально) Сделать тестовую подпись с помощью установленного контейнера и полученных значений \ и \: ``` bash touch test.txt sudo -u ervu /opt/cprocsp/bin/amd64/cryptcp -signf -dn ./test.txt rm -f test.txt test.txt.sgn ``` +### Установка сертификата ЕСИА + +1. Скачать сертификаты тестовой и продуктивной сред ЕСИА, используемые для формирования электронных подписей ответов как поставщика, по ссылке: https://esia.gosuslugi.ru/public/esia.zip + +2. Из списка сертификатов выбрать тот, который подходит под конфигурацию стенда (в зависимости от алгоритма подписи и от того, является ли среда тестовой или продуктивной). + +3. Установить выбранный сертификат для пользователя, от которого запускается модуль подписания (команды выполняются от имени **ervu**). +``` bash +/opt/cprocsp/bin/amd64/certmgr -install -file '.cer' +``` + +Результатом команды будет список полей сертификата. Из него необходимо получить следующие значения: +- Поле "SHA1 отпечаток": это значение нужно будет указать в конфигурационном файле модуля подписания в качестве настройки \. +- Поле "Алгоритм подписи": проверить, что значение совпадает с настройками ИС в ЕСИА. +- Поле "Истекает": проверить, что срок действия сертификата не истёк. + ### Установка и настройка nginx Дальнейшие шаги выполняются от имени root: