Permalink
Switch branches/tags
Nothing to show
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
72 lines (39 sloc) 5.06 KB

Аутентификация по SSL {#auth}

Последнее обновление: 2017-07-11 | Редактировать на GitHub

Помимо аутентификации по логину и паролю, может быть использована аутентификация по сертификатам, а также электронная цифровая подпись.

Аутентификация по цифровой подписи {#sign-auth}

Для аутентификации по цифровой подписи Контрагент должен создать пару 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, а закрытый ключ использовать для подписи запросов.

Как подписывать запросы

  1. Для каждого XML-пакета вычисляется хэш от текста XML-запроса с использованием выбранного алгоритма MD5 / SHA1, подписывается сохраненным закрытым ключом и кодируется по схеме Base64. Таким образом формируется ЭЦП пакета.
  2. В заголовке HTTP запроса передаются следующие параметры для выполнения авторизации и проверки целостности данных пакета:
    • X-Digital-Sign – ЭЦП пакета;
    • X-Digital-Sign-Alg – алгоритм вычисления ЭЦП, выбранный для вычисления хеша. Поддерживаются алгоритмы:
      • MD5withRSA
      • SHA1withRSA
При авторизации по ЭЦП тег с паролем extra name="password" не используется.

Аутентификация по клиентскому сертификату {#ssl-auth}

Для аутентификации по клиентскому сертификату Контрагенту необходимо создать, а затем передать запрос на сертификат и открытый ключ в QIWI.

1. Создание CSR-запроса на сертификат

Запрос на сертификат генерируется одновременно с закрытым ключом, например, с помощью утилиты OpenSSL:

openssl req -new -nodes -batch -subj "/C=RU/ST=Russia/L=Moscow/O=QIWI/emailAddress=mail@qiwi.ru" -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

2. Получение сертификата

Открытый ключ и запрос на сертификат необходимо передать менеджеру QIWI. Менеджер возвращает Контрагенту СА-сертификат и клиентский сертификат, сформированный в ответ на запрос.

3. Отправка запросов

Запросы должны отправляться по адресу:

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