Ruby使用了错误版本的openssl

$brew install openssl
Warning: openssl-1.0.2a-1 already installed
 $openssl version
OpenSSL 0.9.8zd 8 Jan 2015
 $ruby -ropenssl -e 'puts OpenSSL::OPENSSL_VERSION'
OpenSSL 1.0.1j 15 Oct 2014
 $rvm -v
rvm 1.26.11 (latest) by Wayne E. Seguin <wayneeseguin@gmail.com>,Michal Papis <mpapis@gmail.com> [https://rvm.io/]

我看到openssl版本之间存在很多差异. Homebrew认为它在1.0.2a-1上,openssl本身认为它在0.9.8zd,而Ruby认为它在1.0.1j上.我甚至都不知道这些中的任何一个是否真的是最新的!

如何解决这种差异并让Ruby使用正确版本的OpenSSL?它使用错误版本的事实阻止我使用安全API.

解决方法

使用HomeBrew安装OpenSSL不会立即将其作为默认的OpenSSL链接.

首先,让我们检查您使用的是哪个版本(在2015年7月10日,最新版本是1.0.2d):

openssl version -a
which openssl
ruby -r openssl -e 'puts OpenSSL::OPENSSL_VERSION'

现在,我们一定要将OpenSSL升级到最新版本:

brew update
brew install openssl
brew unlink openssl
brew link --force openssl

如果再次运行初始检查,您应该看到前两个指向新安装的OpenSSL. Ruby很可能仍然指向旧的,因为它是用它编译的.

如果它指向旧版本,让我们重新编译Ruby并将其指向新版本.为了确保它将使用正确的版本,让我们传递OpenSSL前缀 – 尽管我们连接自制软件的OpenSSL后不应该这样做.

rvm get stable
rvm install ruby-2.1.6 --with-openssl-dir=`brew --prefix openssl`

(如果你已经在使用2.1.6,则重新安装rvm)

这应该做到这一点.

相关文章

以下代码导致我的问题: class Foo def initialize(n=0) @n = n end attr_accessor :n d...
这是我的spec文件,当为上下文添加测试“而不是可单独更新用户余额”时,我得到以下错误. require 's...
我有一个拦截器:DevelopmentMailInterceptor和一个启动拦截器的inititializer setup_mail.rb. 但我想将...
例如,如果我有YAML文件 en: questions: new: 'New Question' other: recent: ...
我听说在RSpec中避免它,let,let !,指定,之前和主题是最佳做法. 关于让,让!之前,如果不使用这些,我该如...
我在Rails中使用MongoDB和mongo_mapper gem,项目足够大.有什么办法可以将数据从Mongoid迁移到 Postgres...