我正在尝试为Openssl开发自己的动态引擎。
首先,我将通过加载其中一个引擎来了解openssl。
我安装了openssl-1.0.1f。
如此配置:
./config -shared --prefix=/home/user/work/openssl --openssldir=/home/user/work/openssl no-asm -fPIC
并且正在做:
make and make install
在此之后我使用以下方法测试了引擎:
./openssl engine -vvvv dynamic -pre SO_PATH:../lib/engines/libgost.so -pre ID:gost -pre LOAD
(dynamic) Dynamic engine loading support
[Success]: SO_PATH:../lib/engines/libgost.so
[Success]: ID:gost
[Success]: LOAD
Loaded: (gost) Reference implementation of GOST engine
CRYPT_PARAMS: OID of default GOST 28147-89 parameters
(input flags): STRING
这似乎没问题。
现在我尝试在一个非常简单的c程序中加载引擎,但是我无法让ENGINE_by_id返回除NULL之外的任何东西。我已经尝试了所有可以想到的东西,但我完全陷入困境。
以下是我的代码:
#include <openssl/rsa.h>
#include <openssl/pem.h>
#include <openssl/err.h>
#include <openssl/evp.h>
#include <openssl/engine.h>
#include <stdio.h>
#include <string.h>
int main() {
ENGINE_load_dynamic();
ENGINE *eng = ENGINE_by_id("dynamic");
printf("Error: %s\n", ERR_reason_error_string(ERR_get_error()));
ENGINE_ctrl_cmd_string(eng, "SO_PATH", "/home/user/work/openssl/lib/engines/libgost.so", 0);
ENGINE_ctrl_cmd_string(eng, "ID", "gost", 0);
ENGINE_ctrl_cmd_string(eng, "LOAD", NULL, 0);
ENGINE_ctrl_cmd_string(eng, "CMD_FOO", "some input data", 0);
if(NULL == eng) {
printf("Error: %s\n", ERR_reason_error_string(ERR_get_error()));
abort(); // failed
}
return 0;
}
构建为:
gcc test.c -o test -I/home/user/work/openssl/include -L/home/user/work/openssl/lib -L/home/user/work/openssl/lib/engines -lcrypto -lssl -lgost
输出:
./test
Error: (null)
我做错了什么?
答案 0 :(得分:0)
因为您将应用程序与本地库链接,所以在运行时请不要忘记导出LD_LIBRARY_PATH
或以内联方式使用它。
LD_LIBRARY_PATH=/home/user/work/openssl/lib:/home/user/work/openssl/lib/engines ./test
答案 1 :(得分:0)
我做了以下事情,事情对我有用