我用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?
谢谢你的帮助。
如果默认的“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文件或任何适合您的情况最好。
该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
在“认证”宝石添加到您的Gemfile。
更多信息: https://rubygems.org/gems/certified
见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
这也现在为我工作。 事情开始工作,当我跑“酿造医生”,这使我像“未设置SSL_CERT_DIR”线索
检查您的系统时钟!
期长(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