Помимо аутентификации по логину и паролю, может быть использована аутентификация по сертификатам, а также электронная цифровая подпись.
Для аутентификации по цифровой подписи Контрагент должен создать пару RSA-ключей, например, с помощью утилиты OpenSSL. Размер ключа должен быть 2048 бит, ключ должен быть закодирован в BASE64.
- Сгенерировать закрытый ключ. Выполните команду:
openssl genrsa -out private.key 2048
Далее введите пароль и подтвердите:
Enter pass phrase for private.key:
В папке выполнения команды будет создан файл с приватным ключом: private.key
.
- Получить открытый ключ, соответствующий закрытому, командой:
openssl rsa -in private.key -pubout -out public.key
- Контрагент должен передать открытый ключ в QIWI, а закрытый ключ использовать для подписи запросов.
POST /xml/topup.jsp HTTP/1.1
Content-Type: application/xml
Host: api.qiwi.com
X-Digital-Sign: XXXXXXXX
X-Digital-Sign-Alg: SHA1withRSA
- Для каждого XML-пакета вычисляется хэш от текста XML-запроса с использованием выбранного алгоритма MD5 / SHA1, подписывается сохраненным закрытым ключом и кодируется по схеме Base64. Таким образом формируется ЭЦП пакета.
- В заголовке HTTP запроса передаются следующие параметры для выполнения авторизации и проверки целостности данных пакета:
X-Digital-Sign
– ЭЦП пакета;X-Digital-Sign-Alg
– алгоритм вычисления ЭЦП, выбранный для вычисления хеша. Поддерживаются алгоритмы:MD5withRSA
SHA1withRSA
extra name="password"
не используется.
Для аутентификации по клиентскому сертификату Контрагенту необходимо создать, а затем передать запрос на сертификат и открытый ключ в QIWI.
Запрос на сертификат генерируется одновременно с закрытым ключом, например, с помощью утилиты OpenSSL:
openssl req -new -nodes -batch -subj "/C=RU/ST=Russia/L=Moscow/O=QIWI/[email protected]" -newkey rsa:2048 -keyout private.key -out cert_request.csr
В запросе Контрагент указывает свои данные: язык, страну, город, название организации и email. В примере запроса указаны данные QIWI.
В папке, в которой была выполнена команда, будет создан файл cert_request.csr
и файл закрытого ключа private.key
.
Далее формируется открытый ключ, соответствующий закрытому. Выполните команду:
openssl rsa -in private.key -pubout -out public.key
Открытый ключ и запрос на сертификат необходимо передать менеджеру QIWI. Менеджер возвращает Контрагенту СА-сертификат и клиентский сертификат, сформированный в ответ на запрос.
Запросы к API должны отправляться по адресу:
https://private-api.qiwi.com/xml/topup.jsp
Пример запроса с сертификатом:
user@pc:~/station$ openssl s_client -connect private-api.qiwi.com/xml/topup.jsp:443 -showcerts -CAfile ./CA/our_CA -cert ./my_cert -key ./private_key.pem