17

どこで、いつOpenSSL::OPENSSL_VERSION_NUMBER設定されますか? インストールしたばかりの最新の OpenSSL に設定されないのはなぜですか?

最初のエラー:

$ gem install activesupport -v '3.2.13'
Error while executing gem ... (RuntimeError)
Unsupported digest algorithm (SHA512)

irb に直接アクセスすると、Ruby が「古い」openssl を使用していることがわかります。

$ irb
>> require 'openssl'
=> true
>> OpenSSL::Digest.new('sha512')
RuntimeError: Unsupported digest algorithm (sha512)
>> OpenSSL::OPENSSL_VERSION_NUMBER.to_s(16)
"9070cf"

これは、ビルドしたばかりの OpenSSL のローカル バージョン (少なくとも 0x908000 である必要があります) を Ruby が検出していないことを示しています。関連するコード:

# file: usr/lib/ruby/2.0.0/openssl/digest.rb
...
alg = %w(DSS DSS1 MD2 MD4 MD5 MDC2 RIPEMD160 SHA SHA1)
if OPENSSL_VERSION_NUMBER > 0x00908000
  alg += %w(SHA224 SHA256 SHA384 SHA512)
end

SHA512 が見つからない理由を説明します。

しかし、Ruby が古いバージョンの OpenSSL を使用している理由がわかりません。を使用して新しいソースから OpenSSL と Ruby を構築しました

SANDBOX=/Users/me/sandboxes/ruby2
PATH=$(SANDBOX)/usr/bin:$(PATH)

# Create a fresh OpenSSL from sources
(downloaded and unpacked http://www.openssl.org/source/openssl-1.0.1e.tar.gz)
$ ./config --prefix=$(SANDBOX)/usr --openssldir=$(SANDBOX)/usr/openssl
$ make ; make install ; make clean
# verify openssl
$ which openssl
/Users/me/sandboxes/ruby2/usr/bin/openssl
$ openssl version
OpenSSL 1.0.1e 11 Feb 2013

# Create a fresh Ruby from sources
(download and unpack http://ftp.ruby-lang.org/pub/ruby/2.0/ruby-2.0.0-p0.tar.gz)
$ ./configure --prefix=$(SANDBOX)/usr --with-open-ssl-dir=$(SANDBOX)/usr/openssl
$ make ; make intalll ; make clean
# verify ruby
$ which ruby
/Users/me/sandboxes/ruby2/usr/bin/ruby

しかし、このルビーは、私がビルドしたばかりの openssl 1.0.1e を見つけられないようです。

--with-open-ssl-dirRuby に新しい OpenSSL を使用するように指示するには、 への引数が必要かつ十分であると理解していまし./configureたが、それはうまくいかないようでした。

私が構築した新しい OpenSSL を Ruby に認識させる方法についてのアイデアはありますか?

ruby extconf.rb ; make ; make install@Gaurish (以下) の提案に従って実行しようとしましたが、プロジェクトのルート ディレクトリではなく、システムにインストールされている OpenSSL が引き続き検出されます。

4

5 に答える 5

0

古い質問ですが、古い設定に対処する必要がある場合は依然として関連しています:

私の場合、問題は OpenSSL のインストールにありました。このブログで説明されているように、共有ライブラリがOpenSSL とともにインストールされていることを確認する必要があります。

$ ./config --prefix=/path/to/openssl-0.9.8g shared
$ make depend
$ make
$ make install

そして、通常どおりOpenSSLをインストールしました。

Ruby の場合、次の構成行を使用しました。

$ ./configure --prefix=/path/to/ruby-2.2.2/ --with-openssl-dir=/path/to/openssl-0.9.8g
$ make
$ make install

結果:

$ /path/to/ruby-2.2.2/bin/irb
irb(main):001:0> require "openssl"
=> true
irb(main):002:0> OpenSSL::Digest.new('sha512')
=> #<OpenSSL::Digest: cf83e13000efb8bd00042850d66d8007d620e4050b0005dc83f4a921d36ce00047d0d13c5d85f2b0ff8318d2877eec2f000931bd47417a81a538327af927da3e>
于 2016-03-18T12:50:49.907 に答える