未加载Openssl Engine for iOS

时间:2016-01-14 21:48:26

标签: ios openssl openssl-engine

我们有一个项目需要在iOS设备上运行openssl引擎。我们已经为测试引擎编译了.so文件,它可以在命令行中正常工作。但是当我们将它放入iOS项目并尝试加载引擎时,加载步骤总是会出错。

NSString *enginePath = [[NSBundle mainBundle] pathForResource:@"silly-engine" ofType:@"so"];
char* engine_id = "silly-engine";
char* engine_path = (char *)[enginePath UTF8String];
ENGINE_load_dynamic();
ENGINE *dyn = ENGINE_by_id("dynamic");

if (!ENGINE_ctrl_cmd_string(dyn, "SO_PATH", engine_path, 0))
{
    NSLog(@"SO_PATH failed"); 
}
if (!ENGINE_ctrl_cmd_string(dyn, "DIR_ADD", engine_path, 0))
{
    NSLog(@"DIR_ADD failed");
}
if (!ENGINE_ctrl_cmd_string(dyn, "ID", engine_id, 0))
{
    NSLog(@"ID failed");
}


if (!ENGINE_ctrl_cmd(dyn, "LIST_ADD", 1, NULL, NULL, 0))
{
    NSLog(@"LIST_ADD failed");
}

if (!ENGINE_ctrl_cmd_string(dyn, "LOAD", NULL, 0))
{
    NSLog(@"LOAD failed");
}

ENGINE *myEngine = ENGINE_by_id(engine_id);

myEngine将离开NULL。我怀疑iOS不允许这样的动态库。有没有人有经验如何使OpenSSL引擎在iOS上运行?

2 个答案:

答案 0 :(得分:0)

Apple不允许您使用"所以" iOS上的(共享库)。

最简单的方法是通过CocoaPods将OpenSSL集成到您的项目中:https://cocoapods.org/pods/OpenSSL-Universal

答案 1 :(得分:0)

最后我通过使用静态引擎解决了它。在OpenSSL引擎调用中只需加载引擎文件即可。 iOS上无需动态引擎。