我在 /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 引擎?