Openssl,engine_pkcs11,libp11 / OpenSC

时间:2013-10-18 18:23:48

标签: openssl pkcs#11 opensc

朋友们,我有一张智能卡,我想整合OpenSSL。计划通过OpenSSL中的“ENGINE”系统执行此操作。但是,我有一个理解的问题。事实上存在engine_pkcs11opensclibp11pkcs11-helper等内容。有谁可以解释这种关系?首先是什么和什么编译?

写一个带有外部PKCS#11函数的库来将它连接到openssl是否足够?我必须获取库engine_pkcs11的源代码并修改它以适合我的卡? 我需要opensclibp11pkcs11-helper吗?那么,为什么需要这些库?

另外,我应该注意智能卡不支持RSA算法,它将是一个不同的算法 !!!!

真的很期待你的回答!

3 个答案:

答案 0 :(得分:7)

OpenSC的11号pkcs引擎的openssl引擎需要通过pkcs#11在openssl和smartcard之间进行交互。

引擎构建于libp11之上,由OpenSC构建,这是一个抽象/包装层/接口,基于pkcs#11标准API构建,用于实用。

从上到下我们有:

  • openssl(由Openssl提供)
  • openssl pkcs#11引擎(由OpenSC提供)
  • libp11(OpenSC)
  • pkcs#11 standard api(由RSA Laboratories提供)
  • pkcs#11模块(由智能卡供应商提供)

因此,在最佳情况下,您只需为特定的智能卡硬件编写pkcs#11模块,然后使用pkcs#11引擎加载它。

问题在于pkcs#11引擎目前仅支持CKM_RSA_PKCS,因此,您可能还要扩展当前的pkcs#11 openssl引擎。

https://github.com/OpenSC/OpenSC/wiki

的更多信息

答案 1 :(得分:1)

我添加了一些最新信息,可以帮助那些属于这个问题的用户。

  • opensc-pkcs11.so是用于实现PKCS#11 API的OpenSC模块。它上面写着libopensc.so和其他OpenSC库。

  • libp11是一个帮助程序库,旨在使应用程序中的PKCS#11更容易,而无需编程到PKCS#11 API。它将成为一个pkcs#11模块。

  • engine_pkcs11是一个使用libp11的OpenSSL引擎模块,它依赖于OpenSSL和libp11的版本,它现在包含在libp11中,因为libp11也可以用作引擎。

    < / LI>
  • pkcs11-helper(我从未使用过)是使用PKCS#11“更容易”使用的另一个库。

  • pkcs11-spy是一个PKCS#11 API模块,它跟踪pkcs11-spy dlopens的另一个PKCS#11模块的所有调用和返回。

For more information

答案 2 :(得分:0)

此外:

此处是Windows用户的说明

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

此处的说明: https://github.com/OpenSC/libp11/blob/master/INSTALL.md

确保已将OpenSSL 64位版本安装到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设备了。