КриптоАРМ API: лимиты, статусы операции и обработка ошибок - Документация для КриптоАРМ 6
Перейти к содержанию

Лимиты, статусы и ошибки#

Эта статья описывает ограничения внешнего API, статусы завершения операции и поведение приложения при ошибке и отмене.

Содержание:


Лимиты#

Что ограничивается Значение
Ожидающие вызовы API 8; выполняются последовательно
Один запрос: параметры, файл или результат 600 секунд
Сообщение сервису об ошибке или отмене 10 секунд
Установка соединения с сервером 30 секунд
Ожидание действия пользователя 5 минут
Ответ сервиса, встроенный JSON или локальный файл 64 МиБ
Один входной файл 512 МиБ
Все входные файлы одной операции 512 МиБ и не более 100 файлов
Транспортный ZIP-архив Не более 100 записей и 512 МиБ распакованных данных
Данные, встроенные в один JSON-результат в Base64 64 МиБ суммарно

Повторный вызов отклоняется, пока предыдущий не завершён. Вызовы различаются по источнику, команде и идентификатору транзакции, а вызов со ссылкой на файл параметров — по пути к этому файлу.

Base64 увеличивает объём передачи примерно на треть. Для больших результатов используйте multipart/form-data или returnFiles: false.

Время ожидания запроса и время ожидания действия пользователя отсчитываются независимо. Общего времени ожидания у сессии нет: прервать запущенную криптографическую операцию безопасно невозможно.


Статусы операции#

status Значение
Completed Операция завершена; результат может описывать недействительную подпись
Error Техническая или операционная ошибка
Canceled Пользователь отказался от выполнения или отменил операцию

Для Error дополнительно передаются Error: true и ErrorDescription. Частичный успех проверки подписи сохраняет доступные результаты и сообщает ошибку для неуспешной части. Остальные операции signAndEncrypt частичных результатов не отправляют — см. Необработанные файлы.

ErrorDescription содержит стабильные коды приложения — например, x509.sign.failed или x509.verify.invalidSignature. Сообщения криптографических библиотек в контракт не входят: они остаются в лог-файле и в журнале приложения.

💡 Примечание: недействительная подпись — это результат проверки, а не ошибка. Конверт имеет status: "Completed", а signValid и signers[].isValid — значение false.


Ошибки и отмена#

Если поддерживаемая сетевая команда уже прошла проверку доверия, приложение отправляет сообщение об ошибке, чтобы сервис не оставался в ожидании.

Если обработчик команды ещё не сформировал результат, сообщение уходит на исходный адрес — тот, с которого получены параметры, а не на uploader, — методом <команда>.parameters. Статус в нём всегда Canceled, какой бы ни была причина, а сама причина передаётся в ErrorDescription:

{
  "jsonrpc": "2.0",
  "method": "signAndEncrypt.parameters",
  "id": "tx-42",
  "params": {
    "status": "Canceled",
    "Error": true,
    "ErrorDescription": "Operation failed"
  }
}

Метод и текст сообщения зависят от этапа и причины:

Когда method
Параметры не получены или не прошли проверку <команда>.parameters
certificates: ошибка или отмена после чтения параметров certificates.base64, certificates.import или certificates.information — по операции
signAndEncrypt: ошибка или отмена после чтения параметров signAndEncrypt.outDirectResults или signAndEncrypt.verifySignResults
Приложение закрыто до завершения вызова Метод текущего этапа: до чтения параметров <команда>.parameters (для signAndEncrypt — signandencrypt.parameters), после — метод результата
Причина ErrorDescription
Пользователь отменил операцию или закрыл её окно Operation canceled
Пользователь отказал в diagnostics или отменил certrequests Access denied
Пользователь не доверил сервис Access denied
Пользователь закрыл приложение до завершения вызова App closed
Остальные ошибки Описание причины

Отказ в доверии сообщается только сервису, который обратился впервые: пользователь нажал Отмена, закрыл окно подтверждения или не ответил за 5 минут. Сервис от этого доверенным не становится. Если у уже доверенного сервиса сменился сертификат и пользователь отказал, сообщение не отправляется.

На вызов команды, которой в приложении нет, приложение отвечает только доверенному сервису, чей сервер по-прежнему предъявляет сохранённый ключ. Окно подтверждения при этом не показывается. Сервис получает <команда>.parameters со статусом Canceled и ErrorDescription: "Command is not supported: <команда>". Для sendMail, saveDocuments, authorize и mtlsAuthorization метод — sendMail.parameters, documents.parameters, authorize.parameters и mtlsAuthorization.parameters.

При выходе из приложения App closed получают выполняемый вызов и локальные вызовы, ждущие в очереди. Сетевой вызов получает сообщение, только если уже прошёл проверку доверия и вход пользователя; сетевые вызовы в очереди завершаются без сообщения. Доставка не гарантируется: приложение не ждёт её завершения.

Ошибка TLS или сертификата при проверке доверия, неизвестная команда от недоверенного сервиса и недоступный адрес завершаются без сообщения. Вызывающая сторона должна иметь собственный таймаут и обрабатывать повторный вызов идемпотентно.

При закрытии или перезагрузке окна операция отменяется до обращения к криптопровайдеру. Уже запущенная операция не отменяется.


Завершение вкладки операции#

Если задан uploader и результат успешно доставлен, вкладка операции закрывается автоматически, а временные файлы удаляются. Исключение — VERIFYSIGN: результат проверки остаётся на экране. В остальных случаях результат остаётся во вкладке, пока пользователь её не закроет.


Смотрите также#

Для повышения удобства работы и хранения данных веб-сайт CRYPTOARM.RU использует файлы COOKIE. Продолжая работу с веб-сайтом, Вы даете свое согласие на работу с этими файлами.