are*_*555 16 ubuntu ssl openssl ruby-on-rails rvm
我使用RVM在Ubuntu 12.04上安装Ruby 1.9.3
rvm pkg install openssl
rvm install 1.9.3 --with-openssl-dir=$rvm_path/usr
Run Code Online (Sandbox Code Playgroud)
然后当我尝试按照以下方式运行时:
require 'open-uri'
open('https://www.google.com/')
Run Code Online (Sandbox Code Playgroud)
我收到错误: OpenSSL::SSL::SSLError: SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed
我该如何解决这个问题?我有许多类似的线程,人们在OSX中有这个问题,但我如何在Ubuntu中解决它?
谢谢你的帮助.
emb*_*oss 25
如果未使用本机OpenSSL库正确设置默认的"OpenSSL目录",则有时会发生这种情况.open-uri用于OpenSSL::X509::Store#set_default_paths告诉OpenSSL在OpenSSL目录中查找包含OpenSSL默认信任的受信任根证书的文件.
在您的情况下,此查找失败.您可以通过设置覆盖默认设置的环境变量使其成功,并告诉OpenSSL查找该目录:
export SSL_CERT_FILE=/etc/pki/tls/cert.pem
Run Code Online (Sandbox Code Playgroud)
这是我的Fedora 16 64位上的根CA捆绑的默认位置,其他受欢迎的位置是/etc/ssl/ca-bundle.crt等.在您的情况下,RVM使用的OpenSSL库位于$ rvm_path/usr中,所以你应该四处寻找合适的默认根CA文件候选者.正确设置环境变量后,对open-uri的调用将成功.
要使环境变量成为永久变量,请使用常用方法,例如在.bashrc,/ etc/profile中定义导出或在您的情况下最适合的情况.
And*_*scu 10
rvm安装的openssl中缺少cacert.pem文件.
$ cd $rvm_path/usr/ssl
$ sudo curl -O http://curl.haxx.se/ca/cacert.pem
$ sudo mv cacert.pem cert.pem
Run Code Online (Sandbox Code Playgroud)
将"认证"gem添加到您的Gemfile中.
更多信息:https://rubygems.org/gems/certified
小智 5
请参阅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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
29977 次 |
| 最近记录: |