我在Mac OS 10.6.8上使用Ruby 1.9.3p0(使用rvm安装) . 当我尝试使用application template hosted on GitHub创建一个新的Rails应用程序时(例如):
$ rails new myapp -m https://github.com/RailsApps/rails3-application-templates/raw/master/rails3-mongoid-devise-template.rb -T -O
我收到此错误消息:
/Users/me/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/1.9.1/net/http.rb:799:in `connect': SSL_connect
returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed
(OpenSSL::SSL::SSLError)
我理解Ruby语言解释器使用OpenSSL连接到GitHub来请求应用程序模板文件 . GitHub要求使用SSL进行所有连接 . 连接失败,因为OpenSSL无法验证服务器证书 .
我可以通过下载证书文件来解决问题:
$ cd /opt/local/etc/openssl
$ sudo curl -O http://curl.haxx.se/ca/cacert.pem
$ sudo mv cacert.pem cert.pem
使用Ruby 1.9.2我没有问题 . 为什么我得到Ruby 1.9.3的“证书验证失败”问题?这是一个Ruby 1.9.3错误吗?它是否特定于Mac OS 10.6.8?我的解决方案是解决这个问题的正确方法吗?
7 回答
正确的答案涉及许多活动部分 . 取决于您的操作系统,Ruby版本,OpenSSL版本,Rubygems版本 . 我研究完之后最终写了一篇文章 . 我的文章解释了错误的原因,提供了进一步诊断的步骤,显示了几种解决方法,并提出了可能的解决方案 . 这将有所帮助:
OpenSSL Errors and Rails – Certificate Verify Failed
还有关于GitHub相关提交和问题的链接 .
对我来说,在更新到最新的RVM(rvm 1.20.12)然后安装ruby-1.9.3-p429之后,在OS X上发生了自制软件 . 我可以通过运行来重现问题:
解决方案与问题中的解决方案类似,但路径错误 . 运行此修复它:
关于正确路径的线索是,当我通过RVM安装ruby-1.9.3-p429时,这在输出中显示:
我有
/usr/local/etc/openssl
路径,但该目录中没有cert.pem
文件,所以我现在有时间进行调查 .我遇到了同样的问题 .
我最终修复它的方法是升级我通过MacPorts安装的OpenSSL版本 . 我从2009年开始运行OpenSSL版本,所以我升级了我的MacPorts安装,然后通过
ports
命令行界面升级了我的OpenSSL安装,错误消失了 .在基于Mac的安装中,Ruby / Rails和OpenSSL之间必须有一些集成,这一点不言而喻 . 在我的情况下,当Facebook将oAuth /登录令牌发送回我的应用程序时,我遇到了使用Facebook登录正常工作的问题,Devise&OmniAuth必须需要
graph.facebook.com
的有效SSL证书,这不是我的旧版本OpenSSL的 .我有一个类似的问题,但不是在Rails上,而是在Ruby on Windows上 . 我通过使用 cacert.pem 证书并将证书的位置设置为环境变量来解决它"SSL_CERT_FILE"
详细解答:https://stackoverflow.com/a/35429863/4747587
Openssl认证目录是Debian中的
/usr/lib/ssl/
. 所以,以下三行对我来说足够了,我遇到了同样的问题,我已经针对OpenSSL的RVM安装编译了我的RVM Ruby . 我移动了原始海报下载的cacerts.pem文件〜/ .rvm / usr / ssl / cert.pem,以解决问题 .
这可能是因为你如何构建1.9.2和1.9.3 - 也许你用来构建每个配置的东西的工具略有不同 . 或者他们可能使用不同版本的OpenSSL .
这是我可以发现的唯一可能相关的变化:Net:1.9.2和1.9.3之间的HTTP
(如果你想查看差异......)