c - 无法编译读取智能卡的 C 应用程序

标签 c smartcard pkcs#11 hsm opensc

我正在尝试编译一个示例 c 应用程序,该应用程序使用 pkcs#11 来查找所有 token 上的私钥,并打印其标签和 ID,但出现以下错误

/tmp/ccAqQ7UI.o: In function initialize':
pkcs11_example1.c:(.text+0x8e5): undefined reference to C_Initialize'
/tmp/ccAqQ7UI.o: In function `get_slot':

示例取自here

使用以下命令进行编译;

 `gcc pkcs11_example1.c -o slots -L /usr/lib/opensc-pkcs11.so`

我不确定应该在 -L 之后链接哪个库。 任何人都可以指导如何编译它以及是否需要链接一些库。

最佳答案

C_Initialize 和其他带有“C_”前缀的 60 多个函数是 PKCS#11 specification 中定义的 cryptoki 函数。 。它们通常在 HSM 供应商提供的独立库中实现。查看您的代码示例,我想说您还需要直接链接 PKCS#11 库,或者您可以修改代码以在运行时使用 LoadLibrary 动态加载 PKCS#11 库。或dlopen然后通过 C_GetFunctionList 调用获取指向所有 cryptoki 函数的指针。您还可以查看pkcs11-logger the source code有关如何执行此操作的示例。

关于c - 无法编译读取智能卡的 C 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24133704/

相关文章:

security - CAC卡和 'generic'智能卡有什么区别?

c# - 从pkcs#11 token 或智能卡访问证书和私钥

java - pkcs11 sso(使用之前的 windows 登录和智能卡)

c - 请解释一下这背后的概念,(c 编程中的 ptr 和 *ptr)之间的区别

c - FIFO 队列头指针不正确

c - 为什么 gcc 在两次成功分配之间留下 16 个字节?

java - 智能卡终端移除 : SCARD_E_NO_SERVICE CardException

protocols - 来自智能卡的响应状态字 0x61xx 是什么意思?

c - void put_page(struct page *page) 在 Linux 中的用法

java - 使用合格证书签署 PDF 文档 - 智能卡