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