Руби OpenSSL::SSL::SSLError

Я анализирую данные рынка криптовалют и использую публичные API некоторых бирж. Программа делает HTTPS-запросы каждые несколько секунд. Как ни странно, он делает ровно 336 запросов, а при 337 запросах он всегда терпит неудачу:

/.rbenv/versions/2.4.5/lib/ruby/2.4.0/net/protocol.rb:44:in `connect_nonblock': SSL_connect SYSCALL returned=5 errno=0 state=error: certificate verify failed (OpenSSL::SSL::SSLError)

Я пробовал различные задержки между запросами (1 секунда, 5, 10 секунд), различные биржи (Bittrex, Poloniex, Tradeogre), различные версии Ruby (2.3.8, 2.4.5, 2.5.3) и различные дистрибутивы Linux. (Ubuntu 18.04.2 LTS, Debian 9.8) на разных хостингах (Google Compute Engine, Amazon EC2). Всегда одно и то же - на итерации #337 происходит сбой. На моей локальной машине (Ruby 2.5.3, Linux Mint 18.3) программа работает без проблем, сбоит только на сервере. Понятия не имею в чем проблема и как исправить. Спасибо в совете.

С точки зрения openssl «сбой проверки сертификата» означает, что openssl не может проверить сертификат сервера, возвращенный с сервера. Обычно это означает одно из следующих: 1. корневой сертификат НЕ находится в списке настроек для вашего клиентского компьютера. или 2. в сертификате сервера отсутствует промежуточный сертификат (это проблема сервера). Без определения того, с каким соединением с сервером связана проблема, трудно что-либо предложить по поводу этой проблемы.

Shane Powell 10.03.2019 23:41

Пожалуйста, покажите соответствующий код и укажите точную ошибку. Также покажите неудавшийся сертификат. Также см. Как создать минимальный, полный и проверяемый пример.

jww 11.03.2019 04:15
Пошаговое руководство по созданию собственного Slackbot: От установки до развертывания
Пошаговое руководство по созданию собственного Slackbot: От установки до развертывания
Шаг 1: Создание приложения Slack Чтобы создать Slackbot, вам необходимо создать приложение Slack. Войдите в свою учетную запись Slack и перейдите на...
0
2
333
1

Ответы 1

Идеи:

  • Отключить проверку сертификата сервера (это ненадежный): open(request_uri, { ssl_verify_mode: OpenSSL::SSL::VERIFY_NONE }) (см. https://stackoverflow.com/a/19172281/384689)

  • Попробуйте другой магазин ЦС (центр сертификации). Например, вы можете загрузить тот, который используется Firefox: https://curl.haxx.se/docs/caextract.html и передать его как параметр cert_store методу Начало().

Другие вопросы по теме