提问人:Vikash 提问时间:12/25/2010 更新时间:2/23/2018 访问量:287289
SSL_connect返回=1 errno=0 state=SSLv3读取服务器证书B:证书验证失败
SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed
问:
我正在使用 Authlogic-Connect 进行第三方登录。运行适当的迁移后,Twitter/Google/yahoo 登录似乎工作正常,但 facebook 登录会引发异常:
SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed
开发日志显示
OpenSSL::SSL::SSLError (SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed):
app/controllers/users_controller.rb:37:in `update'
请提出建议。.
答:
Ruby 找不到任何可信任的根证书。
看看这篇博文,了解解决方案:“Ruby 1.9 和 SSL 错误”。
解决方案是安装包含与Firefox相同的根证书的端口:
curl-ca-bundle
sudo port install curl-ca-bundle
并告诉对象使用它:
https
https.ca_file = '/opt/local/share/curl/curl-ca-bundle.crt'
请注意,如果您希望代码在 Ubuntu 上运行,则需要使用默认证书位置设置属性。
ca_path
/etc/ssl/certs
评论
然后,正如这篇博文所建议的,
您可能希望安装允许您为 设置默认值的 Gem。always_verify_ssl_certificates
ca_file
我在尝试将 JQuery 生成器用于 Rails 3 时遇到了类似的问题
我是这样解决的:
获取 CURL 证书颁发机构 (CA) 捆绑包。您可以使用以下方法执行此操作:
sudo port install curl-ca-bundle
[如果您使用的是MacPorts]- 或者直接拉下来
wget http://curl.haxx.se/ca/cacert.pem
执行尝试验证 SSL 证书的 ruby 代码:。在您的例子中,您希望将其设置为服务器选取它的位置的环境变量,或者在 environment.rb 文件中添加类似内容的内容。
SSL_CERT_FILE=/opt/local/etc/certs/cacert.pem rails generate jquery:install
ENV['SSL_CERT_FILE'] = /path/to/your/new/cacert.pem
您也可以将 CA 文件(我没有尝试过)安装到操作系统上——这里有冗长的说明——这应该以类似的方式工作,但我个人没有尝试过。
基本上,您遇到的问题是某些 Web 服务使用针对 OpenSSL 无法验证的 CA 签名的证书进行响应。
评论
export SSL_CERT_FILE=/usr/local/etc/openssl/certs/cert.pem
sudo curl http://curl.haxx.se/ca/cacert.pem >> /usr/local/etc/cacert.pem
export SSL_CERT_FILE=/usr/local/etc/cacert.pem
SSL_CERT_FILE=/usr/local/etc/openssl/cert.pem
.env
这是用于调试目的的另一个选项。
确保永远不要在任何生产环境中使用它,因为它首先会否定使用 SSL 的好处。只有在本地开发环境中执行此操作才有效。
require 'openssl'
OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE
评论
以下是我所做的工作,如果您在 Leopard 上遇到特别的问题,它会有所帮助。
我的证书很旧,需要更新。我下载了这个:
http://curl.haxx.se/ca/cacert.pem
然后替换了我在 Leopard 上找到的证书:
/usr/share/curl/curl-ca-bundle.crt
重新加载您正在访问它的任何内容,您应该可以开始了!
以下是在 Windows 上修复它的方法: https://gist.github.com/867550(由 Fletcher Nichol 创建)
摘录:
手动方式(镗孔)
从 http://curl.haxx.se/ca/cacert.pem 下载文件。将此文件保存到 。
cacert.pem
C:\RailsInstaller\cacert.pem
现在,通过设置 使 ruby 知道您的证书颁发机构捆绑包。若要在当前命令提示符会话中设置此项,请键入:
SSL_CERT_FILE
set SSL_CERT_FILE=C:\RailsInstaller\cacert.pem
若要使此设置为永久设置,请在控制面板中添加此设置。
评论
在装有最新 macport 的 Mac OS X Lion 上:
sudo port install curl-ca-bundle
export SSL_CERT_FILE=/opt/local/share/curl/curl-ca-bundle.crt
然后,重新运行失败的作业。
请注意,自 Eric G 于 5 月 12 日回答以来,证书文件位置似乎已更改。
评论
export SSL_CERT_FILE=/usr/local/etc/openssl/cacert.pem
仅仅因为对我有用的说明略有不同,我想我添加了我的 2 美分:
我在 OS X Lion 上使用 macports 和 rvm
我安装了curl-ca-bundle:
sudo port install curl-ca-bundle
然后我将我的 omniauth 配置调整为:
Rails.application.config.middleware.use OmniAuth::Builder do
provider :google_oauth2, APP_CONFIG['CONSUMER_KEY'], APP_CONFIG['CONSUMER_SECRET'],
:scope => 'https://www.google.com/m8/feeds https://www.googleapis.com/auth/userinfo.profile',
:ssl => {:ca_path => "/share/curl/curl-ca-bundle.crt"}
end
评论
ca-bundle.crt
:ssl => {:ca_path => "/share/curl/curl-ca-bundle.crt"}
好吧,这对我有用
rvm pkg install openssl
rvm reinstall 1.9.2 --with-openssl-dir=$rvm_path/usr
我的 ubuntu 12.04 的 openssl 实现有问题
评论
curl -O http://curl.haxx.se/ca/cacert.pem
mv cacert.pem cert.pem
mv cert.pem $rvm_path/usr/ssl
问题是 ruby 找不到要信任的根证书。从 1.9 开始,ruby 会检查这一点。您需要确保系统上有 pem 文件格式的 curl 证书。您还需要确保证书位于 ruby 期望的位置。您可以在以下位置获得此证书...
http://curl.haxx.se/ca/cacert.pem
如果您是 RVM 和 OSX 用户,那么您的证书文件位置将根据您使用的 ruby 版本而有所不同。使用 :ca_path 显式设置路径是一个坏主意,因为您的代码在进入生产环境时将无法移植。在那里,你想在默认位置为ruby提供一个证书(并假设你的开发运营人员知道他们在做什么)。您可以使用 dtruss 来确定系统查找证书文件的位置。
就我而言,系统正在查找证书文件
/Users/stewart.matheson/.rvm/usr/ssl/cert.pem
但是 MACOSX 系统需要证书
/System/Library/OpenSSL/cert.pem
我将下载的证书复制到此路径,它起作用了。HTH型
评论
~/.rvm/usr/ssl/cert.pem
cacert.pem
cacert.pem
新的认证宝石旨在解决这个问题:
https://github.com/stevegraham/certified
评论
bundle
require "certified"
cacert.pem
cacert.pem
cacert.pem
这对我有用。如果您使用 rvm 和 brew:
rvm remove 1.9.3
brew install openssl
rvm install 1.9.3 --with-openssl-dir=`brew --prefix openssl`
OSX解决方案:
安装最新的 RVM 稳定版
rvm get stable
使用 rvm 命令自动解决证书
rvm osx-ssl-certs update all
评论
如果您在 OS X 上使用 RVM,则可能需要运行以下命令:
rvm osx-ssl-certs update all
更多信息请见:http://rvm.io/support/fixing-broken-ssl-certificates
以下是完整的解释: https://github.com/wayneeseguin/rvm/blob/master/help/osx-ssl-certs.md
更新
在 Ruby 2.2 上,您可能需要从源代码重新安装 Ruby 才能解决此问题。方法如下(替换为 Ruby 版本):2.2.3
rvm reinstall 2.2.3 --disable-binary
感谢 https://stackoverflow.com/a/32363597/4353 和 Ian Connor。
评论
rvm reinstall 2.2.0 --disable-binary
对我有用的最直接的答案是这个
sudo apt-get install openssl ca-certificates
瞧!!
评论
带有 Homebrew 的 OS X 10.8.x:
brew install curl-ca-bundle
brew list curl-ca-bundle
cp /usr/local/Cellar/curl-ca-bundle/1.87/share/ca-bundle.crt /usr/local/etc/openssl/cert.pem
评论
我遇到了好几天的麻烦,并且四处乱窜。事实证明,这个链接对我非常有帮助。它帮助我在 MAC OS X 9 上成功升级了 SSL。
虽然知道这是一个相当蹩脚的解决方案,但我仍然分享这一点,因为似乎很少有人在这里回答使用 Windows,我认为一些 Windows 用户(包括我)会喜欢一种简单直观的方法。
require 'openssl'
puts OpenSSL::X509::DEFAULT_CERT_FILE
这告诉您的 openssl 在哪里查找证书文件。我的名字不是路易斯,但我的名字是.路径可能因每个环境而异(例如 而不是 )。C:/Users/Luis/Code/luislavena/knap-build/var/knapsack/software/x86-windows/openssl/1.0.0l/ssl/cert.pem
openknapsack
luislavena
即使通过控制台之后,路径也没有改变,所以......我在本地磁盘中创建了目录,并将证书文件放入其中。set SSL_CERT_FILE=C:\foo\bar\baz\cert.pem
C:\Users\Luis\Code\luislavena\knap-build\var\knapsack\software\x86-windows\openssl\1.0.0l\ssl
虽然很蹩脚,但这肯定会奏效。
评论
这可能是SSL证书损坏/无效的问题。在 mac 上,您可以使用以下命令更新 SSL 证书:
rvm osx-ssl-certs update all
一个衬里在管理员提示中为 Windows 修复了它
choco install wget
(首先看到 chocolatey.org)
wget http://curl.haxx.se/ca/cacert.pem -O C:\cacert.pem && setx /M SSL_CERT_FILE "C:\cacert.pem"
或者只是这样做:
gem sources -r https://rubygems.org/
gem sources -a http://rubygems.org/
Milanio的方法:
gem sources -r https://rubygems.org
gem sources -a http://rubygems.org
gem update --system
gem sources -r http://rubygems.org
gem sources -a https://rubygems.org
gem install [NAME_OF_GEM]
评论
我遇到了这个问题,尽管我是 OSX 上的 RVM 用户,但建议的修复程序不起作用。rvm osx-ssl-certs update all
对我有用的修复程序是重新安装最新版本的openssl:
brew update
brew remove openssl
brew install openssl
如果您在 /usr/local/etc/openssl 中有一个指向 cert.pem 的符号链接,请尝试这样做:
ruby -ropenssl -e "p OpenSSL::X509::DEFAULT_CERT_FILE" (should be /usr/local/etc/openssl)
cd /usr/local/etc/openssl
wget http://curl.haxx.se/ca/cacert.pem
ln -s cacert.pem 77ee3751.0 (77ee3751.0 is my symbolic link, should depend on the openssl version)
我尝试使用 安装,但该软件包不再可用:curl-ca-bundle
brew
$ brew install curl-ca-bundle
Error: No available formula for curl-ca-bundle
Searching formulae...
Searching taps...
在 Mac 上对我有用的解决方案是:
$ cd /usr/local/etc/openssl/certs/
$ sudo curl -O http://curl.haxx.se/ca/cacert.pem
在 your (或 for zsh) 中添加以下行:~/.bash_profile
~/.zshrc
export SSL_CERT_FILE=/usr/local/etc/openssl/certs/cacert.pem
然后更新您的终端:
$ source ~/.bash_profile
评论
export SSL_CERT_FILE=/usr/local/etc/openssl/certs/cacert.pem
~/.bash_profile
在 OSX 上出现此错误的原因是 rvm 安装的 ruby。
如果你在OSX上遇到这个问题,你可以在这篇博文中找到一个非常广泛的解释:
http://toadle.me/2015/04/16/fixing-failing-ssl-verification-with-rvm.html
简而言之,对于某些版本的 Ruby,RVM 会下载预编译的二进制文件,这些二进制文件会在错误的位置查找证书。通过强制 RVM 下载源代码并在您自己的计算机上编译,可以确保证书位置的配置正确。
执行此操作的命令是:
rvm install 2.2.0 --disable-binary
如果您已经拥有相关版本,可以使用以下命令重新安装它:
rvm reinstall 2.2.0 --disable-binary
(显然,根据需要替换您的 Ruby 版本)。
评论
\curl -sSL https://get.rvm.io | bash -s stable --autolibs=homebrew
rvm install <ruby-version> --disable-binary
rvm get head
SSL_CERT_FILE
rvm install 2.2.0 --disable-binary
我通过在终端中运行它解决了这个问题。完整的文章可以在这里找到
rvm install 2.2.0 --disable-binary
如果你在本地运行 rails 应用程序,那么只需在 application.rb 的底部添加这一行即可。
OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE
在此之后,您可以毫无问题地使用该应用程序。你可以称它为黑客,但不建议这样做。仅当需要在本地运行时使用
我在做一个Ruby项目时也遇到了同样的问题。我使用的是 Windows 7 64 位。
我通过以下方式解决了这个问题:
- 从 http://curl.haxx.se/ca/cacert.pem 下载 cacert.pem 文件。
- 将该文件保存到 C:/RubyCertificates/cacert.pem
- 然后将我的环境变量“SSL_CERT_FILE”设置为“C:\RubyCertificates\cacert.pem”
来源: https://gist.github.com/fnichol/867550
评论
有时在MAC OSX中并不总是rvm的问题,如果您删除.rvm,问题仍然存在(特别是在您从timemachine备份数据时),您可以尝试这种方式。
1.brew update
2.brew install openssl
添加到我的并运行为我解决了这个问题。gem 'certified', '~> 1.0'
Gemfile
bundle
在Ubuntu上安装以下软件包为我解决了这个问题
sudo apt-get install libssl-dev
只需在 gemfile 中添加 gem 'certified' 并运行 bundle install。
- 宝石认证'
- 捆绑安装
评论
将此添加到您的 gemfile:
gem 'cliver', :git => 'git://github.com/yaauie/cliver', :ref => '5617ce'
只需运行可执行文件,此命令将确保您的所有证书都是最新的。certified-update
这适用于我在 Windows 中的 Ruby on Rails 应用程序。
我不得不重新安装 Ruby。如果您使用的是 Ubuntu 和 rbenv,这应该可以解决它:
rbenv uninstall your_version
# install dependencies
sudo apt-get install autoconf bison build-essential libssl-dev libyaml-dev libreadline6-dev zlib1g-dev libncurses5-dev libffi-dev libgdbm3 libgdbm-dev
# install ruby with patch
curl -fsSL https://gist.github.com/mislav/055441129184a1512bb5.txt | \
rbenv install --patch your_version
有关更多信息,请查看有关此事的 rbenv Wiki。
最新的 rubygem-update-2.6.7 解决了这个问题。http://guides.rubygems.org/ssl-certificate-update/
对我有用的是答案的组合,即:
# Reinstall OpenSSL
brew update
brew remove openssl
brew install openssl
# Download CURL CA bundle
cd /usr/local/etc/openssl/certs
wget http://curl.haxx.se/ca/cacert.pem
/usr/local/opt/openssl/bin/c_rehash
# Reinstall Ruby from source
rvm reinstall 2.2.3 --disable-binary
Ruby 2.3.4 有这个问题:
我解决了它,卸载OpenSSL并重新安装它。我跑了:
brew uninstall --ignore-dependencies openssl
然后
brew install openssl
它完成了这项工作。
评论