SUPPORT-9333. Проверка подписанного сообщения, содержащего отсоединённую подпись

This commit is contained in:
Наиля Алашкова 2025-08-29 13:03:06 +03:00
parent 9d2f2be25a
commit ac08303c90
34 changed files with 2403 additions and 114 deletions

View file

@ -3,6 +3,7 @@
В модуле реализованы следующие функции:
- подпись данных
- проверка подписи маркера доступа
- проверка подписанного сообщения, содержащего отсоединённую (detached) подпись
## Подпись данных
@ -41,7 +42,7 @@ $ /opt/cprocsp/bin/amd64/curl -v http://127.0.0.1/sign -H "Content-Type: text/pl
Приложение принимает POST-запрос по протоколу FastCGI (Content-Type: text/plain).
Проверяет подпись маркера доступа, полученного в теле запроса.
В ответе возвращает один из следующих статус-кодов:
- `200 OK`- подпись валидна
- `200 OK` - подпись валидна
- `401 Unauthorized` - подпись невалидна (в теле ответа возвращается код ошибки от криптопровайдера)
- `500 Internal Server Error` - внутренняя ошибка сервера (подробнее см. в `Обработка ошибок`)
@ -65,6 +66,43 @@ $ /opt/cprocsp/bin/amd64/curl -v http://127.0.0.1/verify -H "Content-Type: text/
<
```
### Проверка подписанного сообщения, содержащего отсоединённую подпись
Приложение принимает POST-запрос по протоколу FastCGI (Content-Type: multipart/form-data).
Проверяет подписанное сообщение, содержащее отсоединённую (detached) подпись.
В ответе возвращает один из следующих статус-кодов:
- `200 OK` - подпись валидна, в ответе возвращает поля "Subject" и "Issuer" из свойств сертификата, которым было подписано сообщение
- `401 Unauthorized` - подпись невалидна (в теле ответа возвращается код ошибки от криптопровайдера)
- `500 Internal Server Error` - внутренняя ошибка сервера (подробнее см. в `Обработка ошибок`)
Пример выполнения запроса:
```
$ /opt/cprocsp/bin/amd64/curl -v http://127.0.0.1/msg/verify_detached \
-F "data=@data.csv;type=application/octet-stream" \
-F "sign=@data.csv.sig;type=application/octet-stream"
* Trying 127.0.0.1:80...
* TCP_NODELAY set
* Connected to 127.0.0.1 (127.0.0.1) port 80 (#0)
> POST /msg/verify_detached HTTP/1.1
> Host: 127.0.0.1
> User-Agent: curl/7.65.3-DEV
> Accept: */*
> Content-Length: 2770
> Content-Type: multipart/form-data; boundary=------------------------d4c9f889765b7342
>
< HTTP/1.1 200 OK
< Server: nginx/1.24.0
< Date: Tue, 26 Aug 2025 08:58:18 GMT
< Content-Type: application/json
< Transfer-Encoding: chunked
< Connection: keep-alive
<
{
"signer_subject":"C=RU, O=Организация, OU=Отдел тестирования отсоединенной подписи, CN=Фамилия Имя Отчество",
"issuer_name": "C=RU, O=УЦ, CN=GOST CA Root"
}
```
## Обработка ошибок
В случае ошибки сервер возвращает ответ со статус-кодом `500 Internal Server Error` и телом в формате JSON, содержащим поле `error_code`.
@ -121,6 +159,9 @@ sign_cert_password = \*\*\*\* *\# пароль от контейнера*
location = /verify *\# значение по умолчанию: /verify*
esia_cert_thumbprint = sha1_thumbprint_of_esia_cert0,sha1_thumbprint_of_esia_cert1 *\# список SHA1 отпечатков сертификатов ЕСИА, указанных через запятую (без пробелов)*
- В секции **\[verify_detached\]** задать настройки проверки подписанного сообщения, содержащего отсоединённую подпись:
location = /msg/verify_detached *\# значение по умолчанию: /msg/verify_detached*
## Логирование времени обработки запросов
***Для включения*** логирования времени обработки запросов необходимо задать переменную окружения SIGN_LOG_TIME: