SSLCaertBadFile ошибка в герою бордюра - PullRequest
1 голос
/ 06 февраля 2012

У меня есть задача rake, которая извлекает и анализирует данные JSON через соединение SSL из внешнего API.

Я использую гем, который оборачивает этот внешний API и у меня нет проблем с локальным запуском, но задача не выполняется при запуске на heroku с #<Curl::Err::SSLCaertBadFile: Curl::Err::SSLCaertBadFile>

Я установил дополнение SSL со встроенным контентом, надеясь, что оно может это исправить, но без кубиков.

Есть идеи?

UPDATE

Мне удалось это исправить, отключив ssl-проверку для запроса curl, предварительно установленного в следующих двух полях:

request.ssl_verify_peer
request.ssl_verify_host

Я не знаю достаточно о SSL, чтобы точно знать, почему ошибка была вызвана этими настройками в среде heroku или каковы последствия ее отключения, помимо снижения безопасности.

1 Ответ

2 голосов
/ 26 марта 2012

Это плохая идея, чтобы отключить проверку сертификатов. См. http://www.rubyinside.com/how-to-cure-nethttps-risky-default-https-behavior-4010.html, http://jamesgolick.com/2011/2/15/verify-none..html и соответствующие ссылки для получения дополнительной информации по этой теме.

Проблема в том, что ваш HTTP-клиент не знает, где найти пакет сертификатов CA на heroku.

Вы не упоминаете, какой клиент используете, но вот пример использования net/https на heroku:

require "net/https"
require "uri"

root_ca_path = "/etc/ssl/certs"

url = URI.parse "https://example.com"
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = (url.scheme == "https")

if (File.directory?(root_ca_path) && http.use_ssl?)
  http.ca_path = root_ca_path
  http.verify_mode = OpenSSL::SSL::VERIFY_PEER
  http.verify_depth = 5
end

request = Net::HTTP::Get.new(url.path)
response = http.request(request)

Вот пример использования Фарадея :

Faraday.new "https://example.com", ssl: { ca_path: "/etc/ssl/certs" }

Удачи.

...