OpenSSL的:: SSL :: SSLError:所以SSL_connect返回= 1个错误号=

2019-06-24 17:18发布

我用RVM在Ubuntu 12.04安装Ruby 1.9.3通过做

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?

谢谢你的帮助。

Answer 1:

如果默认的“OpenSSL的目录”不与本地OpenSSL库设置正确,有时会发生。 开放-URI使用OpenSSL::X509::Store#set_default_paths为了告诉OpenSSL的在OpenSSL目录中查找包含受信任的根证书了OpenSSL信任默认文件。

在你的情况,这种查找失败。 你可以把它通过设置覆盖默认设置,并告诉OpenSSL的在该目录中,而不是寻找一个环境变量成功:

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

这是对我的Fedora 16的64位的根CA束的默认位置,其他受欢迎的地点是/etc/ssl/ca-bundle.crt等。在你的情况下,通过RVM使用OpenSSL库位于$ rvm_path的/ usr,所以你应该看看周围有没有合适的人选默认根CA文件。 环境变量设置正确后,打开-URI的通话将成功。

为了使环境变量永久,使用通常的方式,如在.bashrc中定义的出口,/ etc / profile文件或任何适合您的情况最好。



Answer 2:

该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


Answer 3:

在“认证”宝石添加到您的Gemfile。

更多信息: https://rubygems.org/gems/certified



Answer 4:

见http://jjinux.blogspot.nl/2012/02/ruby-working-around-ssl-errors-on-os-x.html作为替代回答你的问题,它应该工作两个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


Answer 5:

这也现在为我工作。 事情开始工作,当我跑“酿造医生”,这使我像“未设置SSL_CERT_DIR”线索



Answer 6:

检查您的系统时钟!

期长(1周),而不使用后击中虚拟机上此错误。 更新我的系统时钟将立即固定的问题。

如果你正在运行ntpd然后ntpdate -b -u pool.ntp.org会为你做的。



文章来源: OpenSSL::SSL::SSLError: SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed