SUPPORT-8592. Обновлены README и Инструкция по установке

This commit is contained in:
alashkova 2024-10-16 16:14:34 +03:00
parent bb8dac32b9
commit 3e15adb265
2 changed files with 60 additions and 6 deletions

View file

@ -1,6 +1,10 @@
## Краткое описание ## Краткое описание
Модуль предназначен для подписи данных. В модуле реализованы следующие функции:
- подпись данных
- проверка подписи маркера доступа
### Подпись данных
Приложение принимает POST-запрос по протоколу FastCGI (Content-Type: text/plain). Приложение принимает 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 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" Инструкции по сборке из исходников см. "Инструкция по сборке.md"
@ -60,3 +93,6 @@ location = /sign *\# значение по умолчанию: /sign, должн
signer_subject = signer@example.ru *\# email, ИНН, СНИЛС или любая другая строка из свойства контейнера «Субъект»* signer_subject = signer@example.ru *\# email, ИНН, СНИЛС или любая другая строка из свойства контейнера «Субъект»*
pin = \*\*\*\* *\# пароль от контейнера* pin = \*\*\*\* *\# пароль от контейнера*
- В секции **\[verify\]** задать настройки проверки подписи маркера доступа:
location = /verify *\# значение по умолчанию: /verify, должно совпадать со значением в nginx.conf*
esia_cert_thumbprint = sha1thumbprint *\# SHA1 отпечаток сертификата ЕСИА*

View file

@ -24,9 +24,11 @@ cd -
/opt/cprocsp/sbin/amd64/cpconfig -license -set "Номер" /opt/cprocsp/sbin/amd64/cpconfig -license -set "Номер"
``` ```
4. Запросить у руководителя проекта реестра повесток контейнер с ключом ИС, зарегистрированной в ЕСИА. ### Установка ключевой пары ИС, зарегистрированной в ЕСИА
5. Установить полученную ключевую пару для пользователя, от которого запускается модуль подписания (команды выполняются от имени **ervu**). 1. Запросить у руководителя проекта реестра повесток контейнер с ключом ИС, зарегистрированной в ЕСИА.
2. Установить полученную ключевую пару для пользователя, от которого запускается модуль подписания (команды выполняются от имени **ervu**).
Внимание! В следующих командах необходимо заменить ***key_cont.000*** на название контейнера, полученного на предыдущем шаге. Внимание! В следующих командах необходимо заменить ***key_cont.000*** на название контейнера, полученного на предыдущем шаге.
``` bash ``` 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 /opt/cprocsp/bin/amd64/csptest -absorb -certs -autoprov
``` ```
6. Получить перечень сертификатов: 3. Получить перечень сертификатов:
``` bash ``` bash
sudo -u ervu /opt/cprocsp/bin/amd64/certmgr -list sudo -u ervu /opt/cprocsp/bin/amd64/certmgr -list
``` ```
Получить следующие значения: Получить следующие значения:
- Поле "Субъект": любая подстрока из этого поля является signer_subject (нужно будет указать в конфигурационном файле модуля подписания) - Поле "Субъект": любая подстрока из этого поля является signer_subject (нужно будет указать в конфигурационном файле модуля подписания)
- Поле "Ссылка на ключ": убедиться, что значение равно "Есть" (иначе проверьте выполнение предыдущих шагов) - Поле "Ссылка на ключ": убедиться, что значение равно "Есть" (иначе необходимо проверить выполнение предыдущих шагов)
7. Сделать тестовую подпись с помощью установленного контейнера и полученных значений \<signer_subject\> и \<pin\>: 4. (опционально) Сделать тестовую подпись с помощью установленного контейнера и полученных значений \<signer_subject\> и \<pin\>:
``` bash ``` bash
touch test.txt touch test.txt
sudo -u ervu /opt/cprocsp/bin/amd64/cryptcp -signf -dn <signer_subject> ./test.txt sudo -u ervu /opt/cprocsp/bin/amd64/cryptcp -signf -dn <signer_subject> ./test.txt
rm -f test.txt test.txt.sgn 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 '<esia_cert>.cer'
```
Результатом команды будет список полей сертификата. Из него необходимо получить следующие значения:
- Поле "SHA1 отпечаток": это значение нужно будет указать в конфигурационном файле модуля подписания в качестве настройки \<esia_cert_thumbprint\>.
- Поле "Алгоритм подписи": проверить, что значение совпадает с настройками ИС в ЕСИА.
- Поле "Истекает": проверить, что срок действия сертификата не истёк.
### Установка и настройка nginx ### Установка и настройка nginx
Дальнейшие шаги выполняются от имени root: Дальнейшие шаги выполняются от имени root: