ervu-sign-module/Инструкция по установке.md

233 lines
13 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

## Установка модуля подписания
### Создание пользователя ervu
1. Создать пользователя ervu. Для этого выполнить команды от имени root:
``` bash
adduser --system --no-create-home --user-group ervu
```
### Установка и настройка КриптоПро
1. Скачать КриптоПро 5 R3 КС3.
2. Установить КриптоПро.
2.1. Для продуктивного контура:
2.1.1. Установить КриптоПро c конфигурацией kc2. Для этого выполнить команды от имени root:
``` bash
tar -zxvf linux-amd64.tgz && cd ./linux-amd64/
./install.sh kc2 cprocsp-pki-cades
cd -
```
2.1.2. Установить ПАК "Соболь" по инструкции: https://support.cryptopro.ru/index.php?/Knowledgebase/Article/View/285/2/ispolzovnie-pak-sobol-v-kchestve-dsch-v-kriptopro-csp-n-linux
2.2. Для тестового контура:
2.2.1. Установить КриптоПро c конфигурацией kc1. Для этого выполнить команды от имени root:
``` bash
tar -zxvf linux-amd64.tgz && cd ./linux-amd64/
./install.sh kc1 cprocsp-pki-cades
cd -
```
3. Активировать лицензию:
``` bash
/opt/cprocsp/sbin/amd64/cpconfig -license -set "Номер"
```
### Установка ключевой пары ИС, зарегистрированной в ЕСИА
1. Запросить у руководителя проекта реестра повесток контейнер с ключом ИС, зарегистрированной в ЕСИА.
2. Установить полученную ключевую пару для пользователя, от которого запускается модуль подписания (команды выполняются от имени **ervu**).
Внимание! В следующих командах необходимо заменить ***key_cont.000*** на название контейнера, полученного на предыдущем шаге.
``` bash
mkdir /var/opt/cprocsp/keys/ervu/
cp -r key_cont.000/ /var/opt/cprocsp/keys/ervu/
chmod 700 /var/opt/cprocsp/keys/ervu/key_cont.000
chmod 600 /var/opt/cprocsp/keys/ervu/key_cont.000/*
chown -R ervu:ervu /var/opt/cprocsp/keys/ervu/key_cont.000/
/opt/cprocsp/bin/amd64/csptest -absorb -certs -autoprov
```
3. Получить перечень сертификатов:
``` bash
/opt/cprocsp/bin/amd64/certmgr -list
```
Получить следующие значения:
- Поле "SHA1 отпечаток": это значение нужно будет указать в конфигурационном файле модуля подписания в качестве настройки \<sign_cert_thumbprint\>
- Поле "Ссылка на ключ": убедиться, что значение равно "Есть" (иначе необходимо проверить выполнение предыдущих шагов)
- Поля "URL сертификата УЦ": по ссылкам, указанным в этом значении, скачать сертификаты УЦ и установить их (описано далее)
- Поля "URL списка отзыва": в случае отсутствия доступа к УЦ, по ссылкам, указанным в этом значении, скачать CRL и установить их (описано далее)
4. Установить сертификаты УЦ (поля "URL сертификата УЦ" в свойствах сертификата). Для каждого сертификата выполнить команду от имени **root**:
``` bash
/opt/cprocsp/bin/amd64/certmgr -install -store mRoot -file <sign_ca_cert>.cer
```
5. В случае отсутствия доступа к УЦ, установить CRL (поле "URL списка отзыва" в свойствах сертификата). Для каждого CRL выполнить команду от имени **ervu**:
``` bash
/opt/cprocsp/bin/amd64/certmgr -install -store uCA -crl -file <sign_ca_crl>.crl
```
6. Проверить цепочку сертификатов (команда выполняется от имени **ervu**):
``` bash
/opt/cprocsp/bin/amd64/certmgr -list -thumbprint <sign_cert_thumbprint> -chain
```
Результатом команды должна быть строка "Цепочка сертификатов: Успешно проверена."
Подробнее о проверке цепочки сертификатов здесь: https://www.altlinux.org/%D0%9A%D1%80%D0%B8%D0%BF%D1%82%D0%BE%D0%9F%D1%80%D0%BE#%D0%9F%D1%80%D0%BE%D0%B2%D0%B5%D1%80%D0%BA%D0%B0_%D1%86%D0%B5%D0%BF%D0%BE%D1%87%D0%BA%D0%B8_%D1%81%D0%B5%D1%80%D1%82%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%82%D0%BE%D0%B2
7. (опционально) Сделать тестовую подпись с помощью установленного контейнера и полученных значений \<sign_cert_thumbprint\> и \<sign_cert_password\>:
``` bash
touch test.txt
/opt/cprocsp/bin/amd64/cryptcp -signf -thumbprint <sign_cert_thumbprint> -pin <sign_cert_password> -errchain ./test.txt
rm -f test.txt test.txt.sgn
```
### Установка сертификата ЕСИА
1. Скачать сертификаты тестовой и продуктивной сред ЕСИА, используемые для формирования электронных подписей ответов как поставщика, по ссылке: https://esia.gosuslugi.ru/public/esia.zip
2. Из списка сертификатов выбрать тот, который подходит под конфигурацию стенда (в зависимости от алгоритма подписи и от того, является ли среда тестовой или продуктивной):
| Среда \ Алгоритм подписания | RS256 | GOST3410_2012_256 |
|-----------------------------|-----------------------------------------------------|-----------------------------------------------------|
| | RSA_TESIA_2024.cer | TESIA GOST 2012 new.cer |
| Тестовая | Отпечаток: 6a3813240f6cc285e6d4e6d9a4bfeb26038195d8 | Отпечаток: e654f6114dc19bae84c5748794a4fd7797726e71 |
| | Срок действия: по 06.08.2034 | Срок действия: по 24.04.2025 |
|-----------------------------|-----------------------------------------------------|-----------------------------------------------------|
| | RSA_PROD_2024.cer | ГОСТ+ПРОД+24-25.cer |
| Продуктивная | Отпечаток: 29c2f9c8e064d73509eadd685a5508712735e303 | Отпечаток: 20ad21785b9161ef46f075d4dc23c34e1e349228 |
| | Срок действия: по 12.05.2025 | Срок действия: по 08.06.2025 |
3. Установить выбранный сертификат для пользователя, от которого запускается модуль подписания (команды выполняются от имени **ervu**).
``` bash
/opt/cprocsp/bin/amd64/certmgr -install -file '<esia_cert>.cer'
```
Результатом команды будет список полей сертификата. Из него необходимо получить следующие значения:
- Поле "SHA1 отпечаток": это значение нужно будет указать в конфигурационном файле модуля подписания в качестве настройки \<esia_cert_thumbprint\>.
- Поле "Алгоритм подписи": проверить, что значение совпадает с настройками ИС в ЕСИА.
- Поле "Истекает": проверить, что срок действия сертификата не истёк.
- Поля "URL сертификата УЦ": по ссылкам, указанным в этом значении, скачать сертификаты УЦ и установить их (описано далее)
- Поля "URL списка отзыва": в случае отсутствия доступа к УЦ, по ссылкам, указанным в этом значении, скачать CRL и установить их (описано далее)
4. Установить сертификаты УЦ (поля "URL сертификата УЦ" в свойствах сертификата). Для каждого сертификата выполнить команду от имени **root**:
``` bash
/opt/cprocsp/bin/amd64/certmgr -install -store mRoot -file <esia_ca_cert>.cer
```
5. В случае отсутствия доступа к УЦ, установить CRL (поле "URL списка отзыва" в свойствах сертификата). Для каждого CRL выполнить команду от имени **ervu**:
``` bash
/opt/cprocsp/bin/amd64/certmgr -install -store uCA -crl -file <esia_ca_crl>.crl
```
6. Проверить цепочку сертификатов (команда выполняется от имени **ervu**):
``` bash
/opt/cprocsp/bin/amd64/certmgr -list -thumbprint <esia_cert_thumbprint> -chain
```
Результатом команды должна быть строка "Цепочка сертификатов: Успешно проверена."
Подробнее о проверке цепочки сертификатов здесь: https://www.altlinux.org/%D0%9A%D1%80%D0%B8%D0%BF%D1%82%D0%BE%D0%9F%D1%80%D0%BE#%D0%9F%D1%80%D0%BE%D0%B2%D0%B5%D1%80%D0%BA%D0%B0_%D1%86%D0%B5%D0%BF%D0%BE%D1%87%D0%BA%D0%B8_%D1%81%D0%B5%D1%80%D1%82%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%82%D0%BE%D0%B2
### Установка и настройка nginx
Дальнейшие шаги выполняются от имени root:
1. Установить nginx:
``` bash
apt-get install nginx
```
2. Скопировать файл настроек для nginx:
``` bash
cp conf/nginx.conf /etc/nginx/
```
3. Запустить nginx:
``` bash
systemctl start nginx
```
### Установка и настройка ervu-sign-module
1. Установить зависимости для запуска приложения:
``` bash
apt-get install glib2 libfcgi libjson-glib
```
2. Скопировать исполняемый файл:
``` bash
mkdir /opt/ervu-sign-module/
cp ./ervu-sign-module /opt/ervu-sign-module/
```
3. Скопировать файл настроек:
``` bash
cp conf/ervu-sign-module.conf /etc/
```
4. Скопировать юнит:
``` bash
cp ./ervu-sign-module.service /etc/systemd/system/
```
4. Включить запуск службы при загрузке:
``` bash
systemctl enable ervu-sign-module
```
5. Запустить службу:
``` bash
systemctl start ervu-sign-module
```
### Проверка
Для проверки работы модуля выполните команду:
``` bash
curl -v http://127.0.0.1/sign -H "Content-Type: text/plain" -d "test"
```
Вывод должен быть примерно таким (статус-код ответа должен быть равен 200 OK)
```
* Trying 127.0.0.1:80...
* Connected to 127.0.0.1 (127.0.0.1) port 80
> POST /sign HTTP/1.1
> Host: 127.0.0.1
> 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: Tue, 20 Aug 2024 12:00:25 GMT
< Content-Type: text/plain
< Transfer-Encoding: chunked
< Connection: keep-alive
<
REFlyzGQrCjX9DvA7hWwN9vf5kPqBxcG4TLYnXUHnAS9_G-sLAFvaJei2OhxpaWNraHbOv_mMsM_bcDsXWiC0Q
* Connection #0 to host 127.0.0.1 left intact
```
### Версия приложения
Для того, чтобы узнать версию приложения, введите команду:
``` bash
curl -v http://127.0.0.1/version
```
В ответе будет получена версия приложения (статус-код ответа должен быть равен 200 OK).
### Примечания
Подробнее о работе с КриптоПро CSP здесь:
- https://www.altlinux.org/%D0%9A%D1%80%D0%B8%D0%BF%D1%82%D0%BE%D0%9F%D1%80%D0%BE
- https://wiki.astralinux.ru/pages/viewpage.action?pageId=32833902&ysclid=m2si404crb648040570