OpenSSL Android NDK的包装类

时间:2015-05-26 16:50:08

标签: android c android-ndk openssl wrapper

我按照下一个教程在我的应用https://wiki.openssl.org/index.php/FIPS_Library_and_Android中获取OpenSSL Fips 现在我可以将库导入我的项目并链接它,但是我需要创建一个包装类来连接我的库和我的Java代码,我的问题是......有没有办法以简单的方式实现这一点? OpenSSL库中有很多方法,我需要阅读所有这些方法的文档并在C中为每个方法创建一个函数,而且我没有C语言的经验,所以如果你知道另一种方法,这样做我会感谢你的帮助。

1 个答案:

答案 0 :(得分:0)

  

我需要创建一个包装类来连接我的库和我的Java代码,我的问题是......有没有办法以一种简单的方式实现这个目的?

最简单的方法是创建包装器共享对象。包装器共享对象将链接到OpenSSL库的静态版本并隐藏其所有符号。要隐藏符号,请务必指定选项-Wl,--exclude-libs,all

如果您是从命令行工作(而不是从Zygote开始的Java活动),那么您可以使用LD_PRELOAD技巧。但你必须解决Zygote加载库的低级版本。

  

阅读所有这些文件......

是的,RTFM无法解决问题:)

  

并为每个人创建一个C函数...

不,您不需要将1导出为1.例如,您的包装器只能导出如下函数:

MY_SSL_CTX* MyCreateClientContext(...);

MY_SSL_CTX将有效地包装OpenSSL的SSL_CTX。但是MyCreateClientContext会聚合不同的函数调用。例如,它可能会调用:

  • SSLv23_method
  • SSL_CTX_new
  • SSL_CTX_set_verify
  • SSL_CTX_set_options
  • SSL_CTX_load_verify_locations

您可以在OpenSSL的SSL/TLS Client示例中看到我希望它调用的示例。这将包括配置上下文选项,如SSL_OP_NO_SSLv2 | SSL_OP_NO_SSLv3 | SSL_OP_NO_COMPRESSION