2016-01-17 4 views
0

Чтобы загрузить çapı двигатель динамически, используется следующий код:Использование АЛО двигатель с OpenSSL

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_ctrl_cmd_string(engine, "LOAD", NULL, 0) не удается. Так что же может быть причиной этого?

У меня нет сборки openssl для использования capi, я использую по умолчанию capi.dll, который поставляется с openssl. Должен ли я снова открыть openssl с включенным capi в файле openssl.cfg, или есть что-то еще, что я делаю неправильно?

+0

Что [ 'ERR_get_error'] (http://www.openssl.org/docs/manmaster/crypto/ERR_get_error.html) возвращение? – jww

ответ

0

я был в основном один и тот же вопрос, используя capi.dll в командной строке:

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

После многих проб и ошибок, я обнаружил, что DLL я использую был манекен! Он в основном содержал функцию bind_engine, которая всегда возвращала 0 (что означает сбой). Используя CAPI DLL, которая была изначально скомпилирована под Windows, она работала.

0

Другая (довольно неясная) причина, по которой загрузка двигателя может завершиться неудачей, заключается в том, что сама библиотека требует другой библиотеки, которая не найдена. В этом случае просто получается общая ошибка No such file or directory (хотя путь библиотеки, например, ./capi.dll, верен).

Чтобы проверить, если это проблема, попробуйте

ldd ./capi.dll 

или

cygcheck ./capi.dll 

, и если да, скопировать недостающие библиотеки зависимостей (например, libeay32.dll) к текущему каталогу.

-1

Я потратил время на поиск capi.dll, чтобы понять, что он уже скомпилирован в компоненты Windows openssl.

Из командной строки:

openssl engine capi 

 Смежные вопросы

  • Нет связанных вопросов^_^