Як вирішити проблему з "не вдалося перевірити сертифікат" у Windows


74

Я намагаюся використовувати печатку для 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 / gemnet gem?


У мене така ж проблема, тільки з paypal_adaptiveсамоцвітом. Хтось знайшов відповідь?
wulftone

3
Проблема, схоже, зберігається, і я ніколи не бачив реального пояснення того, що відбувається, зневажаю численні хаки та патчі, які існують. Пояснення простого мирянина допомогли б усім допомогти.
Нубі

Я вирішив це,
переставши

Тільки FYI, ми тимчасово підключалися до стороннього сервера, який мав проблеми із сертифікатом, тому нам довелося IO.copy_stream( open( url, { ssl_verify_mode: OpenSSL::SSL::VERIFY_NONE } ), download_path )просто вимкнути перевірку SSL. У нашому випадку безпека не була проблемою, сервер був поза нашим контролем, і це було тимчасовим рішенням.
Джошуа Пінтер,

Відповіді:


189

Насправді найкращий спосіб, який я знайшов, щоб вирішити це у вікнах для самої Ruby, а не лише для однієї перлини, - це зробити наступне:

  1. Завантажте https://curl.haxx.se/ca/cacert.pem у c: \ railsinstaller \ cacert.pem. Обов’язково збережіть його як файл .pem, а не як текстовий файл.
  2. Перейдіть на свій комп’ютер -> Додаткові налаштування -> Змінні середовища
  3. Створіть нову системну змінну:

    Змінна: SSL_CERT_FILE Значення: C: \ RailsInstaller \ cacert.pem

  4. Закрийте всі командні рядки, включаючи командний рядок сервера Rails тощо.

  5. Запустіть нову підказку ruby ​​irb і спробуйте наступне:

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

Це все повинно зараз працювати просто чудово.


1
чому ми обдумуємо gmail.com?
ahnbizcad

2
FYI, коли я працював із librarian-chefзавантаженням кулінарних книг шеф-кухаря, мені знадобився цей сертифікат, який натомість постачається із шеф-кухарем:C:/opscode/chefdk/embedded/ssl/certs/cacert.pem
nebffa

1
Для користувачів Windows слід забезпечити файл, збережений як "cacert.pem", а не "cacert.pem.txt". Також відбулось обхідне повідомлення про помилки SSL RubyGems у Ruby для Windows (RubyInstaller)
Sudarsan GP

12
Не роби цього. Встановлення випадкового сертифіката, завантаженого через HTTP (а не HTTPS), як повністю довіреного кореневого сертифіката просто вимагає проблем. Не зважайте на те, що запропонована далі у відповіді бібліотека також відома тим, що невпевнена в собі.
Метью Шінкель,

2
@DevDude Це рішення працювало кілька місяців тому. Після недавнього оновлення Windows для мене як на робочому столі, так і на ноутбуці це вже не працює = / Будь-які ідеї?
Ка Мок

27

Рішення для Windows, яке я зібрав із кількох різних відповідей:

  1. Завантажте https://curl.haxx.se/ca/cacert.pem і помістіть його у ВАШЕ_АПП / lib / assets (або де завгодно)
  2. У 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
    
  3. Очевидно, перезавантажте сервер.

Виноски. Можливо, ви зможете вирізати багато непотрібних сертифікатів у файлі cacert.pem, щоб зменшити розмір. Якщо вам потрібне лише це рішення для розробки, ви можете зберегти файл поза вашим проектом іif Rails.env.development?створити рядок _provider з хешем client_options_else_ рядок provider без client_options hash_end


3
Завантаження сертифіката через HTTP - це жахлива ідея.
zigg

21

Після занадто великих пошуків і втраченого часу я знайшов дуже просте рішення, щоб виправити цю проблему в Ruby з Windows.

Два простих кроки:

  1. У командному рядку напишіть: C:\gem install certified

  2. У своєму rbфайлі додайте:require 'certified'

Це воно.


Ви, сер, ви чемпіон! Зверніть увагу: вам слід час від часу використовувати certified-update.batфайл, щоб постійно оновлювати сертифікат.

Рубі нуб тут - коли ви говорите "У вашому rbфайлі", на який саме файл ви маєте на увазі? Це буде boot.rbфайл?
jbyrd


8

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

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

і це, здається, працює нормально зараз. Але не використовуйте це для виробництва .


2
Я ціную "не використовувати це у виробництві", але я відчуваю, що це повинно бути у всіх шапках, виділяти, повторювати, наголошувати та повторювати. Враховуючи відповідь нижче, я вважаю, що цю відповідь слід видалити.
ореошайк

5

Використання URL-адреси http: // замість https: // полегшить вам це

Змініть джерело дорогоцінного каменя на http://rubygems.org/ , використовуючи наступний рядок команди у вашому командному рядку ruby

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

2

Перейдіть на сторінку завантаження оновлення 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

1

Додавання до рішення DevDude, але за допомогою Windows Powershell:

Завантажте http://curl.haxx.se/ca/cacert.pem у c: \ railsinstaller \ cacert.pem

У запиті PowerShell:

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

Тоді я зміг gem updateуспішно бігати

Примітка: ви можете просто визначити цю змінну середовища у своєму профілі notepad $profile


2
Завантаження сертифіката, який не використовується SSL, відкриває для вас атаку MITM.
Метью Шінкель,

1

У мене виникла ця помилка під час спроби встановити рейки 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 - тепер безпечно видаліть gew rubsgems-update

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


0

Я зміг усунути згадані вище параметри PATH або SYSTEM VARIABLE, імпортуючи сертифікат як довірений орган.

  1. Виклик certmgr.msc
  2. Клацніть правою кнопкою миші папку Trusted Root Certificate Authority.
  3. Виберіть "Усі завдання"
  4. Виберіть "Імпорт"
  5. У спадному меню типу файлу виберіть Усі файли та виберіть файл cacert.pem.
  6. Ви повинні отримати повідомлення "Імпорт успішний"


0

збережіть файл cacert.pmp з https://curl.haxx.se/ca/cacert.pem, а потім додайте цей файл до папки yourruby-installation \ lib \ ruby ​​\ 2.3.0 \ rubygems \ ssl_certs

наприклад: C: \ Ruby23 \ lib \ ruby ​​\ 2.3.0 \ rubygems \ ssl_certs


0

Це мені допомогло: 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')

Сподіваюся, це може допомогти.


0

Я також стикався з цією проблемою, коли встановлював старіші рубінові версії. Коли я встановив останню версію Ruby, ця проблема зникла. Отже, в основному потрібно було оновити сертифікат SSL.


-3

Для людей, які користуються рейками 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}} }

2
{:ssl => {:verify => false}}не є рішенням, це просто створює іншу проблему.
ореошайк
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.