Использование сертификата на сервере партнера
Базовая схема взаимодействия при вызове API
Вызов API осуществляется согласно спецификации Oauth 2.0, который предполагает первичное получение токена, разрешающего выполнить непосредственный запрос API (access_token).
Ознакомиться с RFC Oauth 2.0 - https://tools.ietf.org/html/rfc6749
Загрузка сертификата хранилище
На порталах oauth.sber.ru
, oauth-psi.sber.ru
, oauth-ift.sber.ru
используется сертификат, выпущенный УЦ The Ministry of Digital Development and Communications.
В связи с этим, необходимо в доверенные цепочки полученного сертификата на Шаге 1 добавить сертификат минцифры, скачать Сертификаты Минцифры РФ по ссылке.
Подключение к oauth.sber.ru, oauth-psi.sber.ru и oauth-ift.sber.ru осуществляется с помощью протоколов TLS 1.2 или TLS 1.3. Список поддерживаемых шифров:
DHE-RSA-AES128-GCM-SHA256
DHE-RSA-AES256-GCM-SHA384
ECDHE-ECDSA-AES128-GCM-SHA256
ECDHE-ECDSA-AES256-GCM-SHA384
ECDHE-ECDSA-CHACHA20-POLY1305
ECDHE-RSA-AES128-GCM-SHA256
ECDHE-RSA-AES256-GCM-SHA384
ECDHE-RSA-CHACHA20-POLY1305
TLS_CHACHA20_POLY1305_SHA256
При необходимости, контейнер можно распаковать для импорта клиентских и корневых сертификатов в Keystore и Truststore вашего хранилища.
Для этого можно воспользоваться командой:
openssl pkcs12 -in <имя вашего файла>.p12 -nodes -nocerts -out private.key
openssl pkcs12 -in <имя вашего файла>.p12 -clcerts -nokeys -out client_cert.crt
openssl pkcs12 -in <имя вашего файла>.p12 -cacerts -nokeys -chain -out cacerts.cer
После выполнения команды вы получите 3 файла, которые можно загружать в ваши хранилища:
- Приватный ключ в файле private.key
- Клиентский сертификат в файле client_cert.crt
- Корневые сертификаты SberAPI CA и SberAPI Root CA, представленные в одном файле cacerts.cer.
Проверить информацию, содержащуюся в извлеченных сертификатах можно по команде:
openssl pkcs12 -in cacerts.cer -out log.txt
Внутри файла log.txt будет представлено содержание файла сертификата.
Пример
Bag Attributes: <Empty Attributes>
subject=C = RU, ST = Moscow, L = Moscow, O = Sberbank of Russia, OU = SberAPI, CN = SberAPI Root CA
issuer=C = RU, ST = Moscow, L = Moscow, O = Sberbank of Russia, OU = SberAPI, CN = SberAPI Root CA
-----BEGIN CERTIFICATE-----
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
01DQKYYc15s=
-----END CERTIFICATE-----
Шаг 3. Использование сертификата при вызове API
Как крепить сертификаты к запросу - ниже приведены примеры на curl:
Вариант 1
curl --cert-type P12 --cert cert.p12:password
Вариант 2
curl --cert-type P12 --cert certificate.p12 --pass "***"
Вариант 3
curl --cert cert.crt --key private.key
Запроса с указанием версии протокола не ниже TLS 1.3
curl --tlsv1.3 https://oauth.sber.ru
Запроса с указанием версии протокола TLS 1.2 и конкретным шифром
curl --tlsv1.2 --tls-max 1.2 --ciphers ECDHE-RSA-CHACHA20-POLY1305 https://oauth.sber.ru
Шаг 4. Получение access_token при вызове API
Используйте OIDC-токен, если продукт API предполагает работу с данными клиента, в рамках установленных согласий клиентов см. описание.
Новый токен нужно получать для каждого нового запроса к API. Срок жизни токена составляет 60 сек