Электронная подпись запросов
В целях безопасности проведения финансовых операций через открытое API, необходимо формировать и передавать цифровую подпись запросов в заголовке Signature
для следующих типов запросов:
- Платеж через форму мерчанта -> Создание платежа;
- Подтверждение -> Подтверждение платежа;
- Возвраты -> Создание операции возврата.
Для реализации проверки подписаных таким образом запросов мерчант должен передать нам открытый ключ на этапе подключения. Детали создания и передачи ключа см. в подразделе - Формирование ключей. Детали создания и передачи подписи запроса см. в подразделе - Подпись запроса.
Формирование ключей
Требования к ключам:
- Алгоритм — RSA;
- Размер ключа — 2048-bit;
- Форма передаваемого ключа — PEM формат, закодированный в Base64 одной строкой (без переносов).
Пример на Bash:
- Сгенерировать закрытый ключ
openssl genrsa -out private_key.pem 2048
- Получить открытый ключ на основе закрытого
openssl rsa -in private_key.pem -pubout -out public_key.pem
- Закодировать открытый ключ в Base64
openssl base64 -A -in public_key.pem -out public_key_base64.pem
- В рамках подключения к API Точки передать полученный на предыдущем шаге
public_key_base64.pem
Подпись запроса
Требования к подписи:
- Hash-функция — sha256;
- Заголовок для передачи подписи -
Signature
; - Форма передачи подписи — "сырая" подпись, закодированная в Base64 одной строкой (без переносов).
Пример на Bash:
- Подготовить тело запроса (в данном случае - предположим что оно в файле request.txt);
hello, world
- Подписать тело запроса с помощью приватного ключа и с hash-функцией sha256;
openssl dgst -sha256 -sign private_key.pem request.txt > sign_raw.txt
- Закодировать "сырую" подпись в Base64;
openssl base64 -A -in sign_raw.txt -out sign_base64.txt
- Передавать содержимое
sign_base64.txt
в заголовкеSignature
запросов.