将CAPI引擎与openssl结合使用
要动态加载capi引擎,请使用以下代码:将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); 调
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
什么是回报?什么是回报?