我在做迈克尔·哈特尔的教程。当我试图在我的gemset中安装rails 3.2.14时,我得到以下问题:
$ gem install rails -v 3.2.14
错误:无法找到一个有效的宝石'rails'(= 3.2.14),这是为什么:
无法从https://rubygems.org/下载数据- SSL_connect返回=1 errno=0 state=SSLv3读取服务器证书B:证书验证失败(https://s3.amazonaws.com/production.s3.rubygems.org/specs.4.8.gz)
在谷歌搜索之后,我发现我可以使用rubygems的非ssl源代码,所以我运行:
sudo gem sources -a http://rubygems.org
然后,当我再次尝试安装rails时,它成功了。然而,我仍然有上面的问题,但作为一个警告:
警告:无法从'https://rubygems.org/': SSL_connect returned=1 errno=0 state=SSLv3读取服务器证书B:证书验证失败(https://s3.amazonaws.com/production.s3.rubygems.org/specs.4.8.gz)
如何完全删除此警告/错误?
我正在使用以下:
rvm 1.22.15
Ruby 2.0.0p247 (2013-06-27 revision 41674) [x86_64-darwin12.3.0]
OSX 10.8.5
对于RVM和OSX用户
确保你使用最新的rvm:
rvm get stable
然后你可以做两件事:
更新的证书:
RVM osx-ssl-certs更新全部
rubygems更新:
RVM rubygems最新版本
用于非RVM用户
查找证书路径:
cert_file=$(ruby -ropenssl -e 'puts OpenSSL::X509::DEFAULT_CERT_FILE')
生成证书:
security find-certificate -a -p /Library/Keychains/System.keychain > "$cert_file"
security find-certificate -a -p /System/Library/Keychains/SystemRootCertificates.keychain >> "$cert_file"
整个代码:https://github.com/wayneeseguin/rvm/blob/master/scripts/functions/osx-ssl-certs
非操作程序
确保更新包ca-certificates。(在旧系统上它可能不可用——不要使用一个不再接收安全更新的旧系统)
Windows注意
windows的Ruby安装程序是由Luis Lavena准备的,证书的路径将显示类似C:/Users/Luis/…查看https://github.com/oneclick/rubyinstaller/issues/249了解更多详细信息,这个答案是https://stackoverflow.com/a/27298259/497756。
如果您想使用非ssl源,请尝试先删除HTTPS源,然后添加HTTP源:
sudo gem sources -r https://rubygems.org
sudo gem sources -a http://rubygems.org
更新:
正如mapi所述,这应该仅作为临时解决方案使用。如果您通过非ssl源访问RubyGems,可能会有一些安全问题。
一旦不再需要这个解决方案,你应该恢复SSL-source:
sudo gem sources -r http://rubygems.org
sudo gem sources -a https://rubygems.org
尝试使用宝石的源网站,如rubygems.org。使用http而不是https。这种方法不涉及任何工作,如安装证书和所有的。
的例子,
gem install typhoeus --source http://rubygems.org
这是可行的,但有一个警告。
gem已经安装,但是文档没有安装,因为存在证书错误。这是我得到的错误
Parsing documentation for typhoeus-0.7.0 WARNING: Unable to pull
data from 'https://rubygems.org/': SSL_connect returned=1 errno=0
state=SSLv3 read server certificate B: certificate verify failed
(https://rubygems.org/latest_specs.4.8.gz)
对于Illumos / Solaris使用OpenCSW pkgutil:
在“gem Install”之前安装cswcacercertificates
pkgutil -yi CSWcacertificates
如果您使用的ruby套件不是来自OpenCSW,那么您的ruby版本可能希望在另一个地方找到证书文件。在本例中,我只是符号链接了OpenCSW的/etc/opt/csw/ssl/cert.Pem到预期的位置。
看看ruby希望在哪里找到它:
export cf=`ruby -ropenssl -e 'puts OpenSSL::X509::DEFAULT_CERT_FILE'` && echo $cf
然后,如果有差异,链接它:
ln -s /etc/opt/csw/ssl/cert.pem $cf && file $cf
适用于Windows用户(或其他用户)
Rubygems.org有一个指南,不仅解释了如何解决这个问题,而且还解释了为什么这么多人有这个问题:SSL证书更新
出现问题的原因是rubygems.org切换到更安全的SSL证书(使用256位加密的SHA-2)。rubygems命令行工具将引用绑定到正确的证书。因此,rubygems本身不能使用旧版本的rubygems进行更新。Rubygems必须首先手动更新。
首先找出你有什么红宝石:
rubygems –v
这取决于你是否有1.8。2.0 x。X或2.2。x,您将需要下载一个名为“rubygems-update-X.Y.Z”的更新gem。,其中X.Y.Z是您需要的版本。
1.8运行。X:下载:https://github.com/rubygems/rubygems/releases/tag/v1.8.30
2.0运行。X:下载:https://github.com/rubygems/rubygems/releases/tag/v2.0.15
2.2运行。X:下载:https://github.com/rubygems/rubygems/releases/tag/v2.2.3
安装更新gem:
gem install –-local full_path_to_the_gem_file
运行update gem:
update_rubygems --no-ri --no-rdoc
检查rubygems是否更新:
rubygems –v
卸载更新gem:
gem uninstall rubygems-update -x
在这一点上,你可能没问题。但是,您可能没有新证书的最新公钥文件。这样做:
下载最新的证书(当前为AddTrustExternalCARoot-2048.pem)
从https://rubygems.org/pages/download。
所有的证书也位于:https://github.com/rubygems/rubygems/tree/master/lib/rubygems/ssl_certs
找出把它放在哪里:
gem which rubygems
将这个文件放在这个位置的“rubygems\ssl_certs”目录中。
根据rubygems提交,证书被移动到更特定的目录。因此,目前证书(AddTrustExternalCARoot-2048.pem)预计位于以下路径lib/rubygems/ssl_certs/rubygems.org/AddTrustExternalCARoot-2048.pem
RubyGems(命令行工具)的特殊情况是,它需要在其代码中捆绑信任证书,即使在基本操作系统无法验证服务器的身份时,信任证书也允许RubyGems与服务器建立连接。
直到几个月前,这个证书都是由一个CA提供的,但是更新的证书是由另一个CA提供的。
因此,现有的RubyGems安装必须在证书切换之前进行更新,并留出足够的时间让更改传播(以及人们进行更新)。
任何人都可以通过下面链接中给出的简单步骤找到自己的解决方案
https://gist.github.com/luislavena/f064211759ee0f806c88
Windows用户:
在一台可以访问internet的测试机器上成功安装Ruby 2.2.3 (+ rubygems 2.5.1)后,当我在网络内的生产机器上安装bundler时,我遇到了这个SSL错误。
由于我有网络访问限制,并且没有办法更改SSL访问的设置,并且根据错误消息,我执行了以下步骤,以便能够完成绑定器的安装
(这可能听起来很疯狂,但它确实有效……)
通过一台不受限制地上网的机器,下载了以下文件:
spec.4.8.gz (http://rubygems.global.ssl.fastly.net/spec.4.8.gz)
latest_specs.4.8.gz (http://rubygems.global.ssl.fastly.net/latest_specs.4.8.gz)
bundler-1.11.2.gemspec。rz (http://rubygems.global.ssl.fastly.net/quick/Marshal.4.8/bundler-1.11.2.gemspec.rz)
bundler-1.11.2。宝石(http://rubygems.global.ssl.fastly.net/gems/bundler-1.11.2.gem)
我在内网服务器上添加了这些文件,保留了上面链接的文件夹结构:
INTRANET_HOME美元
Spec.4.8.gz e latest_specs.4.8.gz
美元快速INTRANET_HOME \ \ Marshal.4.8
bundler-1.11.2.gemspec.rz
元INTRANET_HOME \宝石
bundler-1.11.2.gem
然后我添加了我的内部网来访问gem源代码:
gem sources -a http://mydomain.com.br
我已经成功运行了“gem安装绑定器”安装后,它所需要的只是删除我的内部网的gem:
gem sources -r http://mydomain.com.br
我希望这是有用的在任何类似的情况....
这个答案不再有效。因为我现在遇到了旧Windows ruby的问题。我会把答案贴出来:
当我想安装一个activesupport gem时:
gem in activesupport --version 5.1.6
ERROR: Could not find a valid gem 'activesupport' (= 5.1.6), here is why:
Unable to download data from https://rubygems.org/ - SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B
: certificate verify failed (https://api.rubygems.org/specs.4.8.gz)
下面的步骤只需要从较新的windows ruby中复制证书。
使用最新的ruby(或至少ruby 2.4.0)并执行以下操作:
从这些目录复制证书(根据您的需要进行调整):
C: \ prg_sdk \红宝石\ ruby - 2.4 \ lib \ ruby \测试盒框\ rubygems \ ssl_certs \ rubygems.org
C: \ prg_sdk \红宝石\ ruby - 2.4 \ lib \ ruby \测试盒框\ rubygems \ ssl_certs \ index.rubygems.org
到达目的地(再次根据需要调整):
C: \ prg_sdk \红宝石\ Ruby231-p112-x64 \ lib \ ruby \ tripwire \ rubygems \ ssl_certs