OpenSSL :: SSL :: SSLError: возвращено SSL_connect = 1 errno = 0 состояние = SSLv3 чтение сертификата сервера B: сбой проверки сертификата

Я использовал RVM для установки Ruby 1.9.3 на Ubuntu 12.04, выполнив

rvm pkg install openssl
rvm install 1.9.3 --with-openssl-dir=$rvm_path/usr

А потом, когда я пытаюсь запустить что-то вроде:

require 'open-uri'
open('https://www.google.com/')

Я получаю ошибку:OpenSSL::SSL::SSLError: SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed

Как мне это решить? У меня много похожих тем, где люди сталкиваются с этой проблемой в OSX, но как мне ее решить в Ubuntu?

Спасибо за вашу помощь.

Ответы на вопрос(6)

Больше информации:https: //rubygems.org/gems/certifie

 The Third07 июн. 2014 г., 01:34
Windows Пользователи, пожалуйста, следуйте этому решению. Я бы сэкономил гораздо больше времени, если бы наткнулся на это решение раньше.
 Liko18 мар. 2015 г., 18:26
Не работает для меня в Windows.
 Saif Al Falah30 мар. 2016 г., 22:04
Как мне это использовать? Я установил драгоценный камень на свою машину, но что после этого?
 Saif Al Falah31 мар. 2016 г., 12:42
@ Meekohi, это не работает.
 Marco Noronha04 янв. 2017 г., 13:41
Да, он работает на Windows :) Я потерял много времени, пытаясь решить эту проблему. Спасибо @ Meekohi

Файл cacert.pem отсутствует в установленном rvm openssl.

$ cd $rvm_path/usr/ssl
$ sudo curl -O http://curl.haxx.se/ca/cacert.pem
$ sudo mv cacert.pem cert.pem

http: //jjinux.blogspot.nl/2012/02/ruby-working-around-ssl-errors-on-os-x.htm в качестве альтернативного ответа на ваш вопрос, он должен работать как для пользователей Ubuntu, так и для Mac OS X и не требует изменения переменных среды.

Решение по вышеуказанной ссылке:

# config/initializers/fix_ssl.rb
# 
# Work around errors that look like:
#
#   SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed (OpenSSL::SSL::SSLError)

require 'open-uri'
require 'net/https'

module Net
  class HTTP
    alias_method :original_use_ssl=, :use_ssl=

    def use_ssl=(flag)
      # Ubuntu
      if File.exists?('/etc/ssl/certs')
        self.ca_path = '/etc/ssl/certs'

      # MacPorts on OS X
      # You'll need to run: sudo port install curl-ca-bundle
      elsif File.exists?('/opt/local/share/curl/curl-ca-bundle.crt')
        self.ca_file = '/opt/local/share/curl/curl-ca-bundle.crt'
      end

      self.verify_mode = OpenSSL::SSL::VERIFY_PEER
      self.original_use_ssl = flag
    end
  end
end
 Mika22 февр. 2016 г., 01:27
Спасибо тебе за это. В дополнение к этому мне нужно было загрузить сертификаты из моего Ubuntu на сервер Debian и указать ca_path в каталог загрузки. Мои сертификаты как-то испортились, когда я обновил пакеты Debian.

когда я запустил «brew doctor», что привело меня к подсказкам вроде «unset SSL_CERT_DIR»

Решение Вопроса

если по умолчанию «каталог OpenSSL» не установлен правильно с собственной библиотекой OpenSSL. open-uri используетOpenSSL::X509::Store#set_default_paths для того, чтобы сказать OpenSSL искать в каталоге OpenSSL файл, содержащий доверенные корневые сертификаты, которым OpenSSL доверяет по умолчанию.

В твоем случае этот поиск не удался. Вы можете добиться успеха, установив переменную среды, которая переопределяет настройку по умолчанию и указывает OpenSSL вместо этого искать в этом каталоге:

export SSL_CERT_FILE=/etc/pki/tls/cert.pem

Это местоположение по умолчанию для корневого CA-пакета на моей 64-битной Fedora 16, другие популярные места - /etc/ssl/ca-bundle.crt и т. Д. В вашем случае библиотека OpenSSL, используемая RVM, находится в $ rvm_path / usr , поэтому вам следует поискать подходящего кандидата для корневого файла CA по умолчанию. После того, как переменная окружения установлена правильно, вызов open-uri будет успешным.

Чтобы сделать переменную среды постоянной, используйте обычные способы, такие как определение экспорта в .bashrc, / etc / profile или в любом другом месте, которое лучше всего подходит в вашей ситуации.

 aren5555524 мая 2012 г., 03:51
При установке Ubuntu я должен был установитьexport SSL_CERT_FILE=/etc/ssl/certs/ca-certificates.crt
 Mark O'Connor27 июн. 2013 г., 15:07
+ 1 исправил мою проблему с подробным объяснением того, что пошло не так!
 Mark O'Connor27 июн. 2013 г., 16:36
Проверьте свои системные часы !!

1 неделя) без использования. Обновление моих системных часов немедленно решило проблему.

Если ты бежишьntpd тогдаntpdate -b -u pool.ntp.org сделает это за тебя.

Ваш ответ на вопрос