Openssl, engine_pkcs11, libp11/OpenSC

13

朋友们,我有一张智能卡,想要集成OpenSSL。计划通过OpenSSL中的“ENGINE”系统来实现。然而,我有一个理解上的问题。事实上,有这样的东西:engine_pkcs11opensclibp11pkcs11-helper。能否有人解释一下它们之间的关系?什么是首先编译什么?

编写一个外部PKCS # 11函数库是否足以使我连接到openssl?我需要获取 engine_pkcs11 库的源代码并对其进行修改以适应我的卡吗? 我需要使用 opensclibp11pkcs11-helper 吗?那么,为什么需要这些库呢?

此外,我必须指出智能卡不支持RSA算法,将使用其他算法!!!!

非常期待您的答案!

3个回答

11
需要OpenSC的pkcs#11 OpenSSL引擎才能使OpenSSL和pkcs#11智能卡之间的交互成为可能。
该引擎建立在OpenSC的libp11之上,是一个构建在pkcs#11标准API上的抽象/包装层/接口,用于实用工具目的。
从上到下,我们有:
- OpenSSL(由OpenSSL提供) - OpenSSL PKCS#11引擎(由OpenSC提供) - libp11(由OpenSC提供) - PKCS#11标准API(由RSA Laboratories提供) - PKCS#11模块(由智能卡厂商提供)
因此,在最理想的情况下,您只需编写特定智能卡硬件的pkcs#11模块,然后使用pkcs#11引擎进行加载即可。
问题在于,pkcs#11引擎目前仅支持CKM_RSA_PKCS,因此,您可能还需要扩展当前的pkcs#11 OpenSSL引擎。
更多信息请参见https://github.com/OpenSC/OpenSC/wiki

4
我添加了一些最近的信息,可以帮助那些遇到这个问题的用户。
- opensc-pkcs11.so是OpenSC模块,用于实现PKCS#11 API。它与libopensc.so和其他OpenSC库链接。 - libp11是一个辅助库,旨在使应用程序更容易使用PKCS#11,而无需编写PKCS#11 API程序。它将dlopen pkcs#11模块。 - engine_pkcs11是一个OpenSSL引擎模块,使用libp11,它非常依赖于OpenSSL和libp11的版本,因此现在已包含在libp11中,可以将libp11作为引擎使用。 - pkcs11-helper(我从未使用过)是另一个库,使得使用PKCS#11“更容易”。 - pkcs11-spy是一个PKCS#11 API模块,跟踪pkcs11-spy dlopens的另一个PKCS#11模块的所有调用和返回。
更多信息请参见:此处

1

此外:

这里是Windows用户的说明

在Windows上,您需要自己编译engine_pkcs11.dll。它将不再由OpenSC安装程序提供。

以下是说明: https://github.com/OpenSC/libp11/blob/master/INSTALL.md

确保您已将64位版OpenSSL安装在C:\OpenSSL-Win64中

https://github.com/OpenSC/libp11/releases下载最新版本并使用x64本机命令提示符为Visual Studio编译

nmake -f Makefile.mak OPENSSL_DIR=C:\OpenSSL-Win64 BUILD_FOR=WIN64

然后您获得了pkcs11.dll。将其与opensc-pkcs11.dll一起复制到一个没有空格的目录中,现在OpenSSL可以加载这些dll。

engine dynamic -pre ID:pkcs11 -pre SO_PATH:C:\Tools\pkcs11\pkcs11.dll -pre LIST_ADD:1 -pre LOAD -pre MODULE_PATH:C:\Tools\pkcs11\opensc-pkcs11.dll

现在您可以使用您的OpenSC设备。

不需要自己编译,网站上提供了版本0.4.11,库的所有者正在测试自动生成版本0.4.13。 - jmd

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接