【发布时间】:2017-05-23 00:39:35
【问题描述】:
快速问题:如何验证我从命令行编写的自定义 openSSL 引擎的功能?
现在我正在关注this 很棒的教程,并且能够使用我的测试程序(source code here,位于 test/wssha256engine_test 的测试程序)成功地运行引擎(返回全 2 的摘要值) .c).
brett@wintermute:~/openssl_ws/wssha256engine$ make test
make[1]: Entering directory
/home/brett/openssl_ws/wssha256engine/test
make[1]: '../bin/test' is up to date.
make[1]: Leaving directory
/home/brett/openssl_ws/wssha256engine/test
brett@wintermute:~/openssl_ws/wssha256engine$ bin/test
Engine Loaded...
Initializing wssha256 engine...
*TEST: Successfuly initialized engine [A test engine for the ws sha256 hardware encryption module, on the Xilinx ZYNQ7000]
init result = 1
Digest NID=672 requested
SHA256 algorithm context initialized
*TEST: Digest INIT 1
SHA256 update
*TEST: Digest Update 1
SHA256 final: sizeof(EVP_MD)= 120
SHA256 cleanup
*TEST: Digest Final 1 Digest size:32
22222222222222222222222222222222
但是,由于某些原因,我还想使用 openssl 命令行界面来运行我刚刚编写的引擎,并让它计算像this other tutorial 中的随机字符串的摘要,只使用 sha256 而不是 md5。
但是当我尝试这样做时,引擎不会加载并导致错误告诉我我的摘要的 NID 不存在,而是使用标准算法对字符串进行哈希处理:
brett@wintermute:~/openssl_ws/wssha256engine$ echo "Hello" | openssl dgst -engine /home/brett/Thesis/openssl_ws/wssha256engine/bin/libwssha256engine.so -sha256
ERROR: Digest is empty! (NID = 0)
engine "wssha256" set.
(stdin)= 66a045b452102c59d840ec097d59d9467e13a3f34f6494e539ffd32c1bb35f18
为什么我不能在命令行上使用我的引擎,但我可以创建一个 C 程序来加载它?以及如何使用我的引擎从命令行计算摘要?
注意:我可以从命令行加载引擎,只是不使用它。
【问题讨论】:
-
如果我遵循您的最后一个问题,答案将是您的
shell不知道初始化由您编写的 C 程序加载的 openssl 环境以加载它。据我所知,也没有办法告诉 openssl 接口使用单独的引擎。如果您想通过 CLI 界面使您的引擎可用,那么您需要实现一个小 shell(通过execv等)将命令传递给您的引擎,或者为您的引擎提供一个输入例程,您可以重定向想要命令。 -
@DavidC.Rankin 我认为情况并非如此。许多教程按照我的意图使用引擎 API
-
现在你变得更有意义了。您的 C 程序是根据特定的 API 编写的。您是说 openssl CLI 为您使用的 API 提供了特定的钩子,但是当您尝试使用 C 程序时,您会在尝试初始化引擎时收到
ERROR: Digest is empty!。您是否遵守了页面准备部分的所有要求?特别是“OpenSSL 引擎存储在 /usr/lib/engines/”?
标签: c openssl libcrypto evp-cipher openssl-engine