Перейти к основному содержимому

Электронная подпись запросов

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

Для реализации проверки подписаных таким образом запросов мерчант должен передать нам открытый ключ на этапе подключения. Детали создания и передачи ключа см. в подразделе - Формирование ключей. Детали создания и передачи подписи запроса см. в подразделе - Подпись запроса.

Формирование ключей

Требования к ключам:

  • Алгоритм — RSA;
  • Размер ключа — 2048-bit;
  • Форма передаваемого ключа — PEM формат, закодированный в Base64 одной строкой (без переносов).

Пример на Bash:

  1. Сгенерировать закрытый ключ
openssl genrsa -out private_key.pem 2048
  1. Получить открытый ключ на основе закрытого
openssl rsa -in private_key.pem -pubout -out public_key.pem
  1. Закодировать открытый ключ в Base64
openssl base64 -A -in public_key.pem -out public_key_base64.pem
  1. В рамках подключения к API Точки передать полученный на предыдущем шаге public_key_base64.pem

Подпись запроса

Требования к подписи:

  • Hash-функция — sha256;
  • Заголовок для передачи подписи - Signature;
  • Форма передачи подписи — "сырая" подпись, закодированная в Base64 одной строкой (без переносов).

Пример на Bash:

  1. Подготовить тело запроса (в данном случае - предположим что оно в файле request.txt);
hello, world
  1. Подписать тело запроса с помощью приватного ключа и с hash-функцией sha256;
openssl dgst -sha256 -sign private_key.pem request.txt > sign_raw.txt
  1. Закодировать "сырую" подпись в Base64;
openssl base64 -A -in sign_raw.txt -out sign_base64.txt
  1. Передавать содержимое sign_base64.txt в заголовке Signature запросов.