0

/opt/openssl に新しい OpenSSL インストール (ソースからコンパイルされた 1.1.0) があり、Ruby インストールも /opt/ruby に新しいコンパイル (ソースから 2.1.0dev) があり、--with-openssl-dir でコンパイルされています=/opt/openssl (すべて現在の Debian 上)。Openssl は自分のコンピューターの rdrand エンジンを認識できます

$ openssl engine
(rdrand) Intel RDRAND engine
(dynamic) Dynamic engine loading support

そしてRubyはopensslを見ることができます

$ ruby -ropenssl -e 'p OpenSSL::Random.random_bytes(4)'
"Q\a\"%"

OpenSSL::Engine があり、エンジンもロードできます。

$ ruby -ropenssl -e 'e=OpenSSL::Engine.by_id("openssl"); p e;'
#<OpenSSL::Engine id="openssl" name="Software engine support">

そのセットアップを使用して rdrand ジェネレーターを呼び出そうとすると、次のようになります。

$ ruby -ropenssl -e 'OpenSSL::Engine.by_id("rdrand"); p OpenSSL::Random.random_bytes(4)'
-e:1:in `by_id': no such engine (OpenSSL::Engine::EngineError)
from -e:1:in `<main>'

私はここで愚かなことをしていますか?一般的に: Ruby で OpenSSL を使用し、特定の openssl エンジンを要求するにはどうすればよいですか?

4

1 に答える 1

2

最初にすべてのエンジンをロードする必要があります。

$ ruby -ropenssl -e 'OpenSSL::Engine.load; e = OpenSSL::Engine.by_id("rdrand"); p e;'
#<OpenSSL::Engine id="rdrand" name="Intel RDRAND engine">

実際、恥ずかしいほど単純です。

于 2013-10-07T14:48:27.927 に答える