Как решить проблему с подтверждением сертификата в Windows?

Я пытаюсь использовать signet для OAuth для сервисов Google. И получите эту ошибку:

SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed

Следуя этим вопросам:

Кажется, что решение - либо исправить ca_path, либо установить VERIFY_NONE для SSL.

Исправленное исправление ca_path работает только в Linux (установка порта), а исправление для VERIFY_NONE похоже на faraday.

Есть ли решение для Windows/signet gem?

Ответ 1

На самом деле лучший способ найти это в Windows для самого Ruby, а не только для одного драгоценного камня, заключается в следующем:

  • Загрузите https://curl.haxx.se/ca/cacert.pem в c:\railsinstaller\cacert.pem. Убедитесь, что вы сохранили его как .pem файл, а не текстовый файл.
  • Перейдите на свой компьютер → Дополнительные параметры → Переменные среды
  • Создайте новую Системную переменную:

    Переменная: SSL_CERT_FILE Значение: C:\RailsInstaller\cacert.pem

  • Закройте все ваши приглашения командной строки, включая командную строку сервера Rails и т.д.

  • Запустите новое приглашение ruby ​​irb и попробуйте выполнить следующее:

    $irb>require 'open-uri'
    $irb>open('https://www.gmail.com')
    

Теперь все должно работать отлично.

Ответ 2

Решение для Windows, которое я собрал из нескольких разных ответов:

  • Загрузите https://curl.haxx.se/ca/cacert.pem и поместите его в YOUR_APP/lib/assets (или где угодно)
  • В config/initializers/omniauth.rb:

     #config/initializers/omniauth.rb
    Rails.application.config.middleware.use OmniAuth::Builder do
      provider :facebook, CUSTOMER_KEY, CUSTOMER_SECRET, {client_options: {ssl: {ca_file: Rails.root.join('lib/assets/cacert.pem').to_s}}}
    end
    
  • Очевидно, перезапустите сервер.

Сноска: Возможно, вы сможете вырезать много ненужных сертификатов в файле cacert.pem, чтобы уменьшить размер. Если вам нужно только это решение для разработки, вы можете сохранить файл вне своего проекта и сделать строку if Rails.env.development? _provider с помощью команды client_options hash_ else _provider без client_options hash_ end

Ответ 3

После слишком большого поиска и потери времени я нашел очень простое решение для устранения этой проблемы в Ruby с Windows.

Два простых шага:

  • В командной строке введите: C:\gem install certified

  • В вашем файле rb добавьте: require 'certified'

Что это.

Ответ 4

Обновление инфраструктуры управления пакетами rubygems решило эту проблему для меня в Windows 7.

https://rubygems.org/pages/download

gem update --system          # may need to be administrator or root

Ответ 5

да, я установил файл omniouth.rb в папку инициализаторов:

provider :facebook, FACEBOOK_KEY, FACEBOOK_SECRET, {:client_options => {:ssl => {:verify => false}}}

и теперь это работает нормально. Но не использовать это для производства.

Ответ 6

Использование URL http://вместо https://сделать это проще для вас

Измените источник драгоценного камня на http://rubygems.org/, используя следующую строку команды в вашей рубиновой командной строке

gem sources -a http://rubygems.org/

Ответ 7

Перейдите на страницу загрузки обновлений rubygems: https://rubygems.org/gems/rubygems-update

Нажмите ссылку "Загрузить", и вы загрузите файл rubygems-update-2.6.7.gem. В командной строке перейдите в каталог, в который вы загрузили файл .gem, и введите:

gem install rubygems-update-2.6.7.gem

(или независимо от имени файла, если более новая версия)

Затем введите:

update_rubygems

Вы можете проверить его с помощью:

gem --version

Ответ 8

Добавление в решение DevDude, но с использованием Windows Powershell:

Загрузите http://curl.haxx.se/ca/cacert.pem в c:\railsinstaller\cacert.pem

В командной строке командной строки:

$env:SSL_CERT_FILE = 'c:\RailsInstaller\cacert.pem'

Тогда я смог успешно выполнить gem update

Примечание. Вы можете просто определить эту переменную среды в своем профиле notepad $profile

Ответ 9

У меня была эта ошибка при попытке настроить рельсы 5 на машине Windows, оказалось, что мне пришлось обновить версию rubygem до 2.6.7, а затем она сработала.

шаг 1 скачать rubygem снизу

https://rubygems.org/downloads/rubygems-update-2.6.7.gem

шаг 2 - установите, указав на загруженные рубигемы

gem install --local C:\rubygems-update-2.6.7.gem

шаг 3 - проверить новую версию 2.6.7

gem --version

шаг 4 - теперь безопасно удалите рубизм-обновление gem

gem uninstall rubygems-update -x

шаг 5 попытался снова установить рельсы 5

gem install rails --version 5.0.0

работал как шарм!

Я получил информацию от: http://guides.rubygems.org/ssl-certificate-update/#installing-using-update-packages

Ответ 10

Мне удалось устранить описанную выше настройку PATH или SYSTEM VARIABLE, импортировав сертификат в качестве доверенного органа.

  • Вызов certmgr.msc
  • Щелкните правой кнопкой мыши папку доверенного корневого центра сертификации.
  • Выберите "Все задачи"
  • Выберите "Импорт"
  • Выберите все файлы в раскрывающемся списке типов файлов и выберите файл cacert.pem.
  • Вам следует получить сообщение "Импорт успешно"

Ответ 12

сохраните файл cacert.pmp из https://curl.haxx.se/ca/cacert.pem, а затем добавьте этот файл в папку с папкой yourruby\lib\ruby ​​\ 2.3 0,0\RubyGems\ssl_certs

например: C:\Ruby23\lib\ruby ​​\ 2.3.0\rubygems\ssl_certs

Ответ 13

Это помогло мне: https://coderwall.com/p/ubl6iw/fix-ssl_connect-returned-1-errno-0-state-sslv3-read-server-certificate-b-certificate-verify-failed-openssl-ssl-sslerror Мой проект ruby ​​on rails отправляет данные в api внутри, и он не может проверить внутренний сертификат. Эти линии помогли:

require 'https'

http = Net::HTTP.new('example.com', 443)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_PEER

http.cert_store = OpenSSL::X509::Store.new
http.cert_store.set_default_paths
http.cert_store.add_file('/path/to/internal.cert.pem')

Надеюсь, это поможет.

Ответ 14

Мне также пришлось столкнуться с этой проблемой, когда я установил старые версии ruby. Когда я установил последнюю версию Ruby, эта проблема исчезла. Поэтому в основном сертификат SSL необходимо обновить.

Ответ 15

Для людей, которые используют рельсы 4.

Добавьте это в devise.rb

require "omniauth-google-oauth2"
config.omniauth :google_oauth2, "CLIENT_ID", "CLIENT_SECRET", { access_type: "offline", approval_prompt: "", :client_options => {:ssl => {:verify => false}} }