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