Ruby使用的OpenSSL版本错误

问题描述 投票:8回答:2
 $ 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 <[email protected]>, Michal Papis <[email protected]> [https://rvm.io/]

我发现openssl版本之间存在很多差异。 Homebrew认为它在1.0.2a-1上,openssl本身认为它在0.9.8zd上,而Ruby认为它在1.0.1j上。我什至都不知道其中任何一个实际上是最新的!

如何解决此差异并让Ruby使用正确版本的OpenSSL?它使用了错误的版本,这使我无法使用安全的API。

ruby openssl rvm
2个回答
13
投票

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

首先,让我们检查一下您使用的版本('15年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`

((或rvm reinstall,如果您已经在使用2.1.6)

应该这样做。


0
投票

我正在尝试按照以下步骤操作,以解决我在上面提到的问题:There was an error installing gem gem-wrapper, rubygems-bundler

但是,我在下面看到的与此处提到的步骤的输出不一致。

which openssl
/usr/bin/openssl
openssl version
LibreSSL 2.6.5
ruby -r openssl -e 'puts OpenSSL::OPENSSL_VERSION'
LibreSSL 2.6.5
brew --prefix openssl
/usr/local/Cellar/[email protected]/1.1.1d

尽管我没有安装[email protected](可以通过尝试取消链接openssl来确认,brew --prefix openssl显示对[email protected]的引用

brew unlink openssl
Error: No such keg: /usr/local/Cellar/[email protected]

此观察是否正常?如果没有,请问您可以寻求协助吗?

© www.soinside.com 2019 - 2024. All rights reserved.