Потоковая обработка
Для обработки документов большого размера требуются значительные ресурсы со стороны сервера, так как весь документ на время выполнения криптографической операции хранится в памяти. Для обхода этого ограничения следует применять режим потоковой передачи данных.
В потоковом режиме обработки запроса сервер начинает выполнение операции сразу после получения первых байтов документа, из входного потока данные считываются небольшими блоками, без буферизации всего содержимого в памяти.
Сервис Подписи поддерживает выполнение следующих операций в потоковом режиме:
Операция | Метод |
---|---|
Подпись | /documents |
Хэширование | /documents/hash |
Примечание
Выполнение операций требует аутентификации пользователя. Поточное хэширование документа без аутентификации возможно на сервисе Ключ Lite - конечная точка /hash.
Формат запроса
Для того чтобы передать запрос на выполнение операции в потоковом режиме, клиентское приложение должно сформировать следующий HTTP-запрос:
POST /SignServer/api/documents HTTP/1.1
CPDSS-OPERATION-PARAMS: eyJTa...
Content-Type: application/octet-stream
Authorization: Bearer eyJ0eXA...
Host: {{hostname}}
В отличие от обычного режима передачи данных, в потоковом режиме содержимое
обрабатываемого документа передается в теле запроса, а параметры операции - в
заголовке CPDSS-OPERATION-PARAMS
. Тип содержимого при этом должен быть
application/octet-stream
(можно не указывать).
Формирование заголовка CPDSS-OPERATION-PARAMS
Заголовок CPDSS-OPERATION-PARAMS
в качестве значения содержит параметры
операции (то есть запрос в обычном режиме, из которого убран параметр Content
).
CPDSS-OPERATION-PARAMS: BASE64URL(UTF8Bytes(json-request-wo-content)
Пример запроса на подпись
В потоковом режиме в заголовок помещается следующее значение:
eyJTaWduYXR1cmUiIDogeyAiVHlwZSI6IkNBZEVTIiwgIkNlcnRpZmljYXRlSWQiOjAsICJQYXJhbWV0ZXJzIjp7IkNBREVTVHlwZSI6IlhMVDEiLCAiSXNEZXRhY2hlZCI6InRydWUiLCAiVFNQQWRkcmVzcyI6Imh0dHA6Ly90ZXN0Y2EyLmNyeXB0b3Byby5ydS9UU1AvdHNwLnNyZiJ9fX0
Значение получено путем преобразования BASE64URL(UTF8Bytes(M))
, где M
:
{"Signature" : { "Type":"CAdES", "CertificateId":0, "Parameters":{"CADESType":"XLT1", "IsDetached":"true", "TSPAddress":"http://testca2.cryptopro.ru/TSP/tsp.srf"}}}
Пример запроса на хэширование
В потоковом режиме в заголовок помещается следующее значение:
eyJIYXNoIjp7IlBhcmFtZXRlcnMiOnsiSGFzaEFsZ29yaXRobSI6IkdSIDM0LjExLTIwMTIgMjU2In19fQ
Значение получено путем преобразования BASE64URL(UTF8Bytes(M))
, где M
:
{"Hash":{"Parameters":{"HashAlgorithm":"GR 34.11-2012 256"}}}
Ограничения
Потоковая подпись может применяться только для создания отделенной подписи форматов CAdES (BES, T, XLT1).