我在Windows上实现这一点,这给我带来了很多麻烦。 我已经安装了OpenSSL 32,64,OpenSC,YubiHSM2驱动程序以及libp11(使用MSYS2构建)。
我的OpenSSL.cnf的有趣部分看起来像这样:
openssl_conf = openssl_init
[openssl_init]
engines = engine_section
[engine_section]
pkcs11 = pkcs11_section
[pkcs11_section]
engine_id = pkcs11
dynamic_path = "C:\Windows\System32\opensc-pkcs11.dll"
MODULE_path = "C:\Users\myUser\Desktop\SecureTemial\yubihsm2-sdk\bin\yubihsm_pkcs11.dll"
PIN = "0001password"
init = 0
当我尝试:
C:\OpenSSL-Win64\bin\openssl.exe req -new -x509 -days 365 -sha256 -config C:\Users\myUser\Desktop\SecureTemial\openssl.cnf -engine pkcs11 -keyform engine -key slot_0-label_my_key -out cert.pem
我收到以下内容:
C:\OpenSSL-Win64\bin\openssl.exe : invalid engine "pkcs11"
In Zeile:1 Zeichen:2
+ C:\OpenSSL-Win64\bin\openssl.exe req -new -x509 -days 365 -sha256 -c ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (invalid engine "pkcs11":String) [], RemoteException
+ FullyQualifiedErrorId : NativeCommandError
16056:error:25078067:DSO support routines:win32_load:could not load the shared
library:crypto\dso\dso_win32.c:106:filename(C:\Program Files\OpenSSL\lib\engines-1_1\pkcs11.dll)
16056:error:25070067:DSO support routines:DSO_load:could not load the shared library:crypto\dso\dso_lib.c:161:
16056:error:260B6084:engine routines:dynamic_load:dso not found:crypto\engine\eng_dyn.c:414:
16056:error:2606A074:engine routines:ENGINE_by_id:no such engine:crypto\engine\eng_list.c:339:id=pkcs11
16056:error:25078067:DSO support routines:win32_load:could not load the shared
library:crypto\dso\dso_win32.c:106:filename(pkcs11.dll)
16056:error:25070067:DSO support routines:DSO_load:could not load the shared library:crypto\dso\dso_lib.c:161:
16056:error:260B6084:engine routines:dynamic_load:dso not found:crypto\engine\eng_dyn.c:414:
Error configuring OpenSSL modules
16056:error:25078067:DSO support routines:win32_load:could not load the shared
library:crypto\dso\dso_win32.c:106:filename(C:WindowsSystem32opensc-pkcs11.dll)
16056:error:25070067:DSO support routines:DSO_load:could not load the shared library:crypto\dso\dso_lib.c:161:
16056:error:260B6084:engine routines:dynamic_load:dso not found:crypto\engine\eng_dyn.c:414:
16056:error:260BC066:engine routines:int_engine_configure:engine configuration
error:crypto\engine\eng_cnf.c:141:section=pkcs11_section, name=dynamic_path, value=C:WindowsSystem32opensc-pkcs11.dll
16056:error:0E07606D:configuration file routines:module_run:module initialization
error:crypto\conf\conf_mod.c:173:module=engines, value=engine_section, retcode=-1
我已经检查过dll是否已锁定并以管理员身份运行等。 如果您有任何线索,请告诉我们,请告知我们。
非常感谢!
答案 0 :(得分:0)
这个问题是我对相似主题进行某些研究时出现在搜索结果中的第一个问题。由于尚无答案,因此我将概述解决方案的结果:
要将libp11的PKCS#11引擎与OpenSSL一起使用,必须将其编译为动态引擎,该引擎与您使用的OpenSSL版本静态链接。当您使用binaries from Shining Light Productions(基于您在问题中提到的安装目录进行的很好的猜测)时,使用从第三方资源获得的MSYS2版本可能不起作用,使用PKCS#11库随OpenSC项目的Windows installers一起提供。
幸运的是,Shining Light Productions的OpenSSL版本随附了所有必需的库,因此您可以轻松地自己编译libp11,例如通过使用NMAKE(按照链接查看如何获取它以及如何正确设置命令行以供使用):
C:\OpenSSL-Win32
或C:\OpenSSL-Win64
)。 -libp11的makefile期望使用这些文件夹进行绑定。在构建64位版本的OpenSSL时,必须相应地设置BUILD_FOR
环境变量。运行
set BUILD_FOR=WIN64
在命令行上。
现在通过运行来编译库
NMAKE /F Makefile.mak
如果一切顺利,则libp11的src
文件夹中将包含两个新库:libp11.dll
和pkcs11.dll
。后者是与OpenSSL一起使用的PKCS#11引擎。将其复制到Windows库文件夹(对于32位版本为System32
,对于x64版本为SysWOW64
)。
相应地调整您的openssl.cnf
文件。复制
openssl_conf = openssl_init
到文件的开头,其余到文件的结尾:
[openssl_init]
engines = engine_section
[engine_section]
pkcs11 = pkcs11_section
[pkcs11_section]
dynamic_path = "C:\\Windows\\SysWOW64\\pkcs11.dll"
module_path = "C:\\Users\\myUser\\Desktop\\SecureTemial\\yubihsm2-sdk\\bin\\yubihsm_pkcs11.dll"
PIN = "0001password"
一些最后的笔记:
openssl.cnf
文件确实由OpenSSL接收。 OpenSSL安装附带了几个示例文件。默认情况下,上述二进制文件的配置文件位置对于x64版本为C:\Program Files\Common Files\SSL\openssl.cnf
,对于x86版本为C:\Program Files (x86)\Common Files\SSL\openssl.cnf
。但是您系统上的其他OpenSSL安装(例如从捆绑了OpenSSL的OpenVPN,MingW,MSYS2等安装)可能会干扰设置文件的位置。您可以通过相应地设置OPENSSL_CONF
环境变量来确保使用正确的设置文件。\\
而不是\
来正确转义反斜杠。engine_id
的{{1}}中的init
和openssl.cnf
部分。