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 回答