我按照下一个教程在我的应用程序中获取 OpenSSL Fips https://wiki.openssl.org/index.php/FIPS_Library_and_Android 现在我可以将库导入我的项目并链接它,但是我需要创建一个包装类来将我的库与我的 Java 代码连接起来,我的问题是......有没有办法以简单的方式实现这一点? OpenSSL 库中有很多方法,我需要阅读所有这些方法的文档并为每个方法在 C 中创建一个函数,而且我没有 C 的经验,所以如果你知道另一种方法来做到这一点我会感谢你的帮助。
最佳答案
I need to create a wrapper class for connect my library with my Java code, my question is... is there a way to achieve this in a easy way?
最简单的方法是创建包装器共享对象。包装器共享对象将链接到 OpenSSL 库的静态版本并隐藏其所有符号。要隐藏符号,请务必指定选项 -Wl,--exclude-libs,all
。
如果您是从命令行工作的(而不是从 Zygote 开始的 Java Activity ),那么您可以只使用 LD_PRELOAD
技巧。但是您必须解决 Zygote 加载库的下层版本的问题。
read the documentation of all of them...
是的,没有办法绕过 RTFM :)
and create a function in C for each one...
不,您不需要导出 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
。
关于android - OpenSSL Android NDK 的包装类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30464481/