Подтверждение ответа API
Допустим, у меня есть доступ к API погоды https. Допустим, я запрашиваю его состояние работоспособности в четверг 17/08/2017 23:30 и API отвечает ОК (простой ОК http код).
Как клиент, я должен доказать в будущем, что служба действительно ответила мне этими данными.
Я подумываю попросить API добавить криптографическую подпись отправленных данных + метку времени, чтобы доказать, что они действительно ответили нормально в это конкретное время. Это излишне? Есть ли более простой способ сделать это?
1 ответ
Цифровая подпись, содержащая текущую дату / время или даже добавление метки времени, выпущенной сторонним органом по меткам времени, является подходящим способом гарантировать, что контент был действительно выпущен в определенную дату.
В общем, реализация системы цифровой подписи на HTTP-запросах не так проста, и вам нужно учитывать множество элементов:
Какой контент вы подпишете: заголовки, полезные данные, вложения?
Это бинарный контент или текст? Потому что алгоритмы и форматы подписи будут отличаться
В случае текста вы должны канонизировать содержимое, чтобы избежать проблем с кодированием при проверке подписи на стороне клиента. Также вам нужно определить алгоритм подписи для вычисления контента для подписи
Вам также нужно подписывать вложения, когда они отправляются через потоки? Как вы собираетесь обрабатывать большие файлы?
Как вы собираетесь прикрепить подпись к ответу https: специальный заголовок, дополнительный атрибут в полезной нагрузке?
Как сервер собирается распространять сертификат подписи? Вы должны включить его в доверенное хранилище на клиенте
Но, если вы хотите только доказать, что ответ службы был OK/FAIL, то серверу просто нужно добавить цифровую подпись поверх полезной нагрузки (или вычислить на основе конкатенации заголовков), но если вы хотите реализовать что-то более сложное, я предлагаю вам взглянуть на Json Web Signature (JWS)