Сбербанк говорит: сертификат прикреплён некорректно. Почему?

Ссылка скопирована
1 ответ

Пытаюсь подключиться к API Сбербанка. Делаю голый CURL запрос (без хедера, без полезной нагрузки пока) Приходит ответ: Problem with the local SSL certificate.

$ch = curl_init( 'https://mc.api.sberbank.ru/prod/tokens/v3/oauth' );  curl_setopt( $ch, CURLOPT_SSLCERT, 'https://interotkos.ru/admin/SSL/certificate_fbb85415-7416-4a5d-aa54-93321dc2306d.p12' ); curl_setopt( $ch, CURLOPT_SSLCERTPASSWD, 'XnHJtBKuez3Q' );  curl_setopt( $ch, CURLOPT_CAINFO, 'https://interotkos.ru/admin/SSL/russian-trusted-cacert.pem' );  curl_setopt($ch, CURLOPT_CERTINFO, 1); curl_setopt($ch, CURLOPT_VERBOSE, true);  $response = curl_exec( $ch ); echo "<pre>"; print_r( curl_getinfo( $ch ) ); print_r( curl_strerror( curl_errno( $ch ) ); print_r( $response );  curl_close( $ch );

$ch = curl_init( 'https://mc.api.sberbank.ru/prod/tokens/v3/oauth' ); curl_setopt( $ch, CURLOPT_SSLCERT, 'https://interotkos.ru/admin/SSL/certificate_fbb85415-7416-4a5d-aa54-93321dc2306d.p12' ); curl_setopt( $ch, CURLOPT_SSLCERTPASSWD, 'XnHJtBKuez3Q' ); curl_setopt( $ch, CURLOPT_CAINFO, 'https://interotkos.ru/admin/SSL/russian-trusted-cacert.pem' ); curl_setopt($ch, CURLOPT_CERTINFO, 1); curl_setopt($ch, CURLOPT_VERBOSE, true); $response = curl_exec( $ch ); echo "<pre>"; print_r( curl_getinfo( $ch ) ); print_r( curl_strerror( curl_errno( $ch ) ); print_r( $response ); curl_close( $ch );

Сертификаты там ок. По указанным URL в коде их можно проверить.

Поддержка Сбера говорит, что "сертификат прикреплён некорректно". Большего от них конечно же не добиться. Права доступа к файлам установлены "777".

В чём может быть дело? А то у меня уже руки опускаются. Я не программистка, но иногда возникают необходимость кое-что сделать.

Данный скрипт работает здесь: https://interotkos.ru/admin/sber.php

Для уточнения: хостинг виртуальный, доступа к командной строке нет.

Дополнительно:

как минимум сертификаты должны быть файлами и подключаться как файлы по пути на диске, а не по ссылке.

Ну теперь ваш сертификат можно выкинуть на помойку потому что вы его всем показали с паролем, от вашего имени кто угодно сможет делать запросы.

  • Александр Аксентьев,

    как минимум сертификаты должны быть файлами и подключаться как файлы по пути на диске, а не по ссылке.

    А это обязательно? Я думала, что возможно у меня там с путями какие-то проблемы и указала путь к сертификату (лежащему рядом) через глобальный URL. Поменяла на локальный путь... Не помогает.

    Ну теперь ваш сертификат можно выкинуть на помойку потому что вы его всем показали с паролем, от вашего имени кто угодно сможет делать запросы.

    Спасибо за беспокойство. :)) Это тестирование в сбербанковской песочнице. Понятно, что я сертификат перевыпущу, когда отлажу (да и Сбер просто не даст использовать сертификат песочницы на проде).

  • Tyusha,
    > А это обязательно?

    по другому оно вообще не предусмотрено

  • Ответы:

    Некорректно прикреплен сертификат к запросу либо сертификат вовсе не прикреплен. Необходимо проверить, правильно ли прикреплен клиентский сертификат к запросу. Для успешного вызова API необходимо использование клиентского сертификата в запросе, выпущенного для приложения на Портале разработчика.

    • Ну это и так понятно. У меня вопрос, что я делаю не так, почему сертификат в коде прикреплён как-то не так или не прикреплён вовсе?

      Необходимо проверить, правильно ли прикреплен клиентский сертификат к запросу.

      Как это проверить? Кроме того как пристально смотреть в свой код.

    curl_setopt( $ch, CURLOPT_SSLCERT, 'https://interotkos.ru/admin/SSL/certificate_fbb854...' );

    Following store locations are supported: CurrentUser, LocalMachine, CurrentService, Services, CurrentUserGroupPolicy, LocalMachineGroupPolicy, LocalMachineEnterprise.

    certificate_fbb85415-7416-4a5d-aa54-93321dc2306d.p12

    Schannel also support P12 certificate file, with the string P12 specified with CURLOPT_SSLCERTTYPE.

    https://curl.se/libcurl/c/CURLOPT_SSLCERT.html

    • Спасибо. Удалось продвинуться. Локальный мой Openssl говорит, что не может открыть сертификат p12. Ошибка 58. Unsupported. Сертификат генерит и выдаëт Сбер, вряд ли там что-то не так. В чëм проблема, понять не могу.
    • Tyusha, Недавно сталкивался с проблемой, конвертировал из pem в pfx с помощью openssl3. При последующем импорте PFX была ошибка ввода пароля. Оказалось, что новый openssl использует другой алгоритм шифрования который не поддерживается windows. Возможно у тебя такая же проблема, попробуй переконвертировать сертификат в pem,а потом в p12 c использование openssl 1.1.1 или openssl 3 -legacy. Или можно конвертнуть в pem и протестить.

      Вот обсуждение
      https://stackoverflow.com/questions/69343254/the-p...

    • Valentin Barbolin, спасибо. Я вчера целый день ковырялась, к ночи решила переставить openssl локально (отлаживаю в phpstorm) . На том и ушла спать, сегодня попробую дальше. Но как быть с хостингом и тамошним openssl с учётом, что хостинг без командной строки, а только веб...
    • Tyusha,

      Но как быть с хостингом и тамошним openssl с учётом, что хостинг без командной строки, а только веб...

      Openssl нужен для разового конвертирования сертификата и не важно где это будет сделано.

    • Valentin Barbolin, можете мне обрисовать, что вообще происходит, когда я прикрепляю файл .p12?

      Я (извините за серость, я не профи) понимаю так. Локальная машина перед отправкой открывает указанным паролем файл p12, вынимает оттуда публичный ключ и его вместе с цепочкой сертификатов серверу, а остальное шифрует приватным ключом. Пароль и приватный ключ, никуда не отсылаются. Т.е. ошибка (58) возникает на моей стороне, это НЕ ответ сервера об ошибке.

      Я правильно понимаю происходящее?

    • Tyusha,

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

      Если мы протеорию. В момент запуска кода происходит разшифровка p12, достается сертификат и ключ клиента, в сертифике есть публичный ключ, сертификат отправляется серверу, сервер проверяет валидность сертификата и шифрует ответ публичным ключем добавляет свой сертификат сервера и отправляет клиенту ответ. Клиент проверяет сертификат сервера, расшифровыет ответ своим приватным ключем. Потом клиент и сервер обмениваются ключем для шифрования (сесионный ключ) На этом рукопожатие можно считать законченным. По факту этот сертификат нужен что бы сервер проверил вашу валидность в дальнейшем он не используется, данные шифруются сессионным ключем.

      58. Unsupported - интернет говорит что проблема на вашей стороне. Можно найти решение по запросу 58. Unsupported

    Нужно решить такую задачу?

    Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

    Заказать помощь
    Лучший ответ
    1
    Антон С. Ответ

    Сертификат может быть прикреплен некорректно по нескольким причинам. Давайте разберем основные возможные причины и способы их решения:

    1. Неправильный формат сертификата: Убедитесь, что сертификат имеет правильный формат, который требуется для вашего сервиса. Например, для HTTPS соединения нужен сертификат в формате X.509.

    2. Некорректные файлы сертификата: Проверьте, что все необходимые файлы сертификата (ключ, цепочка сертификации) были прикреплены правильно и доступны для сервера.

    3. Неправильная конфигурация сервера: Убедитесь, что конфигурация вашего веб-сервера (например, Apache, Nginx) правильно указывает на файлы сертификата и ключа.

    Пример кода для настройки SSL сертификата на сервере Apache:

    SSLEngine on
    SSLCertificateFile /path/to/your_domain.crt
    SSLCertificateKeyFile /path/to/your_domain.key
    SSLCertificateChainFile /path/to/your_domain.ca-bundle

    SSLEngine on SSLCertificateFile /path/to/your_domain.crt SSLCertificateKeyFile /path/to/your_domain.key SSLCertificateChainFile /path/to/your_domain.ca-bundle

    4. Проблемы с самим сертификатом: Убедитесь, что сертификат действителен и не истек. Проверьте его статус на сайтах проверки сертификатов.

    5. Проблемы с цепочкой сертификации: Если используется цепочка сертификации, убедитесь, что все промежуточные сертификаты правильно прикреплены и доступны.

    Если после проверки всех вышеперечисленных пунктов проблема не будет решена, рекомендуется обратиться к службе поддержки вашего сертификата или поставщику хостинга для дальнейшей диагностики и решения проблемы.

    Другие ответы (0)

    Пока нет других ответов. Будьте первым, кто поможет автору.

    Ответить на вопрос

    комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    Вам также может быть интересно