异常 "CKR_FUNCTION_NOT_SUPPORTED",PKCS11 与 OpenSC 互操作

Exception "CKR_FUNCTION_NOT_SUPPORTED", PKCS11Interop with OpenSC

我正在尝试将 PKCS11Interop 库与最新版本 (0.16) 的 OpenSC (opensc-pkcs11.dll) 一起使用。我尝试了三个供应商的 USB 令牌,它们是 Yubico 4、NitroKey Pro/Start、Fetian ePass2003,但无法使用 PKCS11Interop 库中的大部分功能。对于库提供的大多数功能,我收到 Net.Pkcs11Interop.Common.Pkcs11Exception: 'Method C_SignRecoverInit returned CKR_FUNCTION_NOT_SUPPORTED'。抛出该异常的函数有C_GetOperationState、C_SetOperationState、C_GenerateKey、C_GenerateKeyPair、Encrypt/Decrypt函数、Sign/Verify函数等

奇怪的是 GetSlotInfo、GetMechanisms、Login、Session 等函数都可以正常工作。

我花了很多时间在这里寻找解决方案。如果有人可以提供帮助,我们将不胜感激。

C_SignRecoverInit 函数在 OpenSC 的大多数驱动程序中都没有实现。其他功能应该没问题,如果不行,请阅读 OpenSC wiki.

中的做什么以及如何报告错误

Net.Pkcs11Interop.Common.Pkcs11Exception 始终表示由通常由设备供应商提供的底层非托管 PKCS#11 库返回的错误。

您收到的错误 - CKR_FUNCTION_NOT_SUPPORTED - 表示非托管 PKCS#11 库没有 support/implement PKCS#11 规范中定义的特定功能。

OpenSC source code 确认您发现它不支持 C_SignRecoverInit 以及其他一些功能。

顺便说一句,这是正常且非常普遍的行为。您几乎找不到支持所有 PKCS#11 功能的 PKCS#11 库。如果 OpenSC 提供的 PKCS#11 库没有提供您真正需要的某些功能,那么我建议您查看商业供应商提供的其他解决方案。