用于 openSSL 的 PKCS#11 引擎

Posted

技术标签:

【中文标题】用于 openSSL 的 PKCS#11 引擎【英文标题】:PKCS#11 engine for openSSL 【发布时间】:2017-04-28 10:25:02 【问题描述】:

我正在尝试在 Windows 7 下设置 openSSL 以使用供应商特定的安全模块。

我从供应商那里得到了一个 PKCS#11 API dll(比如说 vendor.dll)。 PKCS#11引擎已根据https://github.com/OpenSC/libp11创建

如链接中所述,为了测试,我开始

openssl 引擎 pkcs11 -t

但得到:

D:\Gateway\openSSL\Win32\Release>openssl engine pkcs11 -t
11020:error:25078067:DSO support routines:WIN32_LOAD:could not load the shared library:.\crypto\dso\dso_win32.c:179:filename(\usr\local\ssl\lib\engines\pkcs11.dll)
11020:error:25070067:DSO support routines:DSO_load:could not load the shared library:.\crypto\dso\dso_lib.c:233:
11020:error:260B6084:engine routines:DYNAMIC_LOAD:dso not found:.\crypto\engine\eng_dyn.c:467:
11020:error:2606A074:engine routines:ENGINE_by_id:no such engine:.\crypto\engine\eng_list.c:390:id=pkcs11

配置文件为:

[engine_section]
pkcs11 = pkcs11_section

[pkcs11_section]
engine_id = pkcs11
dynamic_path = D:\Gateway\libp11\libp11-master\src\pkcs11.dll
MODULE_PATH = D:\Gateway\driver\smgw\Win32\vendor.dll
init = 0

它试图在 unix 目录 \usr\local... 中查找 dll。 似乎根本没有评估动态路径的内容,因为我可以在那里指定任何内容,我总是收到上面的错误消息。

我做错了什么?

【问题讨论】:

【参考方案1】:

在配置文件中的其他条目之前,您需要:

[openssl_def]
engines = engine_section

另一方面,不需要以下行:

engine_id = pkcs11
init = 0

还要检查(例如,使用ldd)您引用的库是否可以实际加载。如果找不到它们所依赖的库,动态加载器将在它们上失败,然后尝试使用默认库路径,例如

/usr/local/ssl/lib/engines/<engine-id>.dll

【讨论】:

以上是关于用于 openSSL 的 PKCS#11 引擎的主要内容,如果未能解决你的问题,请参考以下文章

Openssl pkcs7命令

如何通过 PKCS#11 API 从 eToken 获取私钥?

使用openssl 创建pkcs12 keystore 为啥会出错

使用 openssl 将多个证书加载到 PKCS12

OpenSSL 在 PKCS12 导出期间挂起,并显示“正在将‘屏幕’加载到随机状态”

在 PHP 中使用“openssl_pkcs7_decrypt”出现错误“BIO_new_file:no such file”