将CAPI引擎与openssl结合使用

将CAPI引擎与openssl结合使用,openssl,cryptoapi,Openssl,Cryptoapi,要动态加载capi引擎,请使用以下代码: EVP_PKEY *key = NULL; ENGINE_load_builtin_engines(); ENGINE *engine = ENGINE_by_id("dynamic"); ENGINE_ctrl_cmd_string(engine, "SO_PATH", "./capi.dll", 0); ENGINE_ctrl_cmd_string(engine, "LOAD", NULL, 0); ENGINE_init(engine); 调

要动态加载capi引擎,请使用以下代码:

EVP_PKEY *key = NULL;
ENGINE_load_builtin_engines();
ENGINE *engine = ENGINE_by_id("dynamic");
ENGINE_ctrl_cmd_string(engine, "SO_PATH", "./capi.dll", 0); 
ENGINE_ctrl_cmd_string(engine, "LOAD", NULL, 0); 
ENGINE_init(engine);
调试时,我检查,
ENGINE\u ctrl\u cmd\u字符串(ENGINE,“LOAD”,NULL,0)
失败。那么这可能是什么原因呢

我没有为使用
capi
构建openssl,我使用的是openssl附带的默认
capi.dll

我应该在openssl.cfg文件中启用capi后再次构建openssl,还是我在做其他事情时出错了?

我在命令行中使用
capi.dll
时遇到了基本相同的问题:

openssl engine dynamic -t -pre SO_PATH:./capi.dll -pre LOAD -post list_csps
openssl engine capi

经过多次尝试和错误,我发现我使用的DLL是一个虚拟的!它基本上包含一个bind_引擎函数,该函数始终返回0(这意味着失败)。使用在Windows下本机编译的CAPI DLL可以正常工作。

我在命令行上使用
CAPI.DLL时遇到了基本相同的问题:

openssl engine dynamic -t -pre SO_PATH:./capi.dll -pre LOAD -post list_csps
openssl engine capi
经过多次尝试和错误,我发现我使用的DLL是一个虚拟的!它基本上包含一个bind_引擎函数,该函数始终返回0(这意味着失败)。使用在Windows下本机编译的CAPI DLL可以工作。

引擎加载可能失败的另一个(相当模糊)原因是库本身需要另一个库,但找不到该库。在这种情况下,只需获得泛型
无此类文件或目录
错误(尽管库的路径,例如
/capi.dll
,是正确的)

要检查这是否是问题所在,请尝试

ldd ./capi.dll

如果是这样,请将缺少的库依赖项(例如,
libeay32.dll
)复制到当前目录。

引擎加载可能失败的另一个(相当模糊)原因是库本身需要另一个库,但找不到。在这种情况下,只需获得泛型
无此类文件或目录
错误(尽管库的路径,例如
/capi.dll
,是正确的)

要检查这是否是问题所在,请尝试

ldd ./capi.dll


如果是这样,请将缺少的库依赖项(例如,
libeay32.dll
)复制到当前目录。

我花了很多时间试图找到capi.dll,却发现它已经编译到Windows openssl组件中

从命令行:

openssl engine dynamic -t -pre SO_PATH:./capi.dll -pre LOAD -post list_csps
openssl engine capi

我花了很多时间试图找到capi.dll,却发现它已经编译到了Windows openssl组件中

从命令行:

openssl engine dynamic -t -pre SO_PATH:./capi.dll -pre LOAD -post list_csps
openssl engine capi
什么是回报?什么是回报?