102 lines
5 KiB
Markdown
102 lines
5 KiB
Markdown
## Краткое описание
|
||
|
||
В модуле реализованы следующие функции:
|
||
- подпись данных
|
||
- проверка подписи маркера доступа
|
||
|
||
### Подпись данных
|
||
|
||
Приложение принимает POST-запрос по протоколу FastCGI (Content-Type: text/plain).
|
||
C помощью аппаратного ДСЧ генерирует state - набор случайных символов, генерируется по стандарту UUID.
|
||
В строку, полученную в теле запроса, добавляет state.
|
||
В ответе возвращает подпись полученной строки в формате urlSafeBase64 (параметр "signature") и сгенерированный state (параметр "state") (Content-Type: application/json).
|
||
|
||
Пример выполнения запроса:
|
||
```
|
||
$ /opt/cprocsp/bin/amd64/curl -v http://127.0.0.1/sign -H "Content-Type: text/plain" -d "test"
|
||
* 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: application/json
|
||
< Transfer-Encoding: chunked
|
||
< Connection: keep-alive
|
||
<
|
||
{
|
||
"signature": "urlSafeBase64_of_signed_string_test_with_state",
|
||
"state": "7c327cb7-7916-4255-bc46-85fbc5ad7d5f"
|
||
}
|
||
```
|
||
|
||
### Проверка подписи маркера доступа
|
||
|
||
Приложение принимает POST-запрос по протоколу FastCGI (Content-Type: text/plain).
|
||
Проверяет подпись маркера доступа, полученного в теле запроса.
|
||
В ответе возвращает один из следующих статус-кодов:
|
||
- 200 OK - подпись валидна
|
||
- 401 Unauthorized - подпись невалидна (в теле ответа возвращается код ошибки от криптопровайдера)
|
||
- 500 Internal Server Error - внутренняя ошибка сервера
|
||
|
||
Пример выполнения запроса:
|
||
```
|
||
$ /opt/cprocsp/bin/amd64/curl -v http://127.0.0.1/verify -H "Content-Type: text/plain" -d "some_valid_access_token"
|
||
* 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: Wed, 16 Oct 2024 09:55:46 GMT
|
||
< Transfer-Encoding: chunked
|
||
< Connection: keep-alive
|
||
<
|
||
```
|
||
|
||
## Сборка из исходников
|
||
|
||
Инструкции по сборке из исходников см. "Инструкция по сборке.md"
|
||
|
||
Примечание. Чтобы задать произвольное имя конфигурационного файла, при сборке приложения необходимо задать параметр CONFIG_NAME.
|
||
Пример:
|
||
```
|
||
cmake -DCONFIG_NAME=/opt/ervu-sign-module.conf ..
|
||
```
|
||
|
||
## Установка
|
||
|
||
Инструкции по установке см. "Инструкция по установке.md"
|
||
|
||
## Настройка
|
||
|
||
Приложение настраивается в конфигурационном файле, заданном на этапе сборки (по умолчанию, /etc/ervu-sign-module.conf).
|
||
|
||
- В секции **\[main\]** задать общие настройки:
|
||
worker_processes = 10 *\# количество воркеров (значение по умолчанию: 10)*
|
||
cp_file = libcapi20.so *\# путь до файла библиотеки криптопровайдера*
|
||
|
||
- В секции **\[fcgi\]** задать настройки fcgi-сервера:
|
||
fcgi_listen_port = 9009 *\# значение по умолчанию: 9009, должно совпадать со значением в nginx.conf*
|
||
fcgi_listen_host = 127.0.0.1 *\# значение по умолчанию: 127.0.0.1, должно совпадать со значением в nginx.conf*
|
||
fcgi_thread_pool_size = 1 *\# значение по умолчанию: 1*
|
||
|
||
- В секции **\[sign\]** задать настройки модуля подписания:
|
||
location = /sign *\# значение по умолчанию: /sign*
|
||
sign_cert_thumbprint = sha1_thumbprint_of_signer_cert *\# SHA1 отпечаток сертификата, которым ИС подписывает секрет*
|
||
sign_cert_password = \*\*\*\* *\# пароль от контейнера*
|
||
|
||
- В секции **\[verify\]** задать настройки проверки подписи маркера доступа:
|
||
location = /verify *\# значение по умолчанию: /verify*
|
||
esia_cert_thumbprint = sha1_thumbprint_of_esia_cert0,sha1_thumbprint_of_esia_cert1 *\# список SHA1 отпечатков сертификатов ЕСИА, указанных через запятую (без пробелов)*
|