加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 在Android应用程序中为HttpClient更改OpenSSL库

发布时间:2020-12-15 07:37:08 所属栏目:Java 来源:网络整理
导读:我需要在我的项目中为HttpClient使用自定义OpenSSL库. 我为Android编译了libcrypto.so和libssl.so,并将文件放在jniLibs文件夹中.应用Heartbleed扫描仪看到它们. System.loadLibrary(“crypto”)和System.loadLibrary(“ssl”)有效. 但是现在我需要让HttpClie
我需要在我的项目中为HttpClient使用自定义OpenSSL库.

我为Android编译了libcrypto.so和libssl.so,并将文件放在jniLibs文件夹中.应用Heartbleed扫描仪看到它们. System.loadLibrary(“crypto”)和System.loadLibrary(“ssl”)有效.
但是现在我需要让HttpClient使用我的库而不是标准的SSL库.但我不知道哪种方式移动以及如何移动.

我使用的是OpenSSL 1.0.1h和Android Studio 1.0.2.

提前感谢您的建议.

解决方法

I have compiled libcrypto.so and libssl.so for Android and put the files in a folder jniLibs…

这不行.

Android使用OpenSSL 1.0.0并在/ system中提供. Zygote在启动时启动并加载OpenSSL的低级版本(它类似于init – 所有Android进程都是从它分叉的).

当您的进程从Zygote分叉时,您的1.0.1版本永远不会加载,因为已经从Zygote加载了1.0.0.你永远不会知道有问题,因为低级版本提供了你需要的所有符号(它的二进制兼容).

您需要编写包装器共享对象.包装器共享对象必须链接到OpenSSL 1.0.1的静态版本(libcrypto.a和libssl.a).您的包装器必须导出唯一的符号,例如My_OpenSSL_add_all_algorithms和My_SSL_load_error_strings.在内部,您的共享对象可以引用未修饰的名称,OpenSSL_add_all_algorithms和SSL_load_error_strings.

所以你的共享对象看起来像这样(也见GCC的Visibility page):

#if __GNUC__ >= 4
    #define DLL_PUBLIC __attribute__ ((visibility ("default")))
    #define DLL_LOCAL  __attribute__ ((visibility ("hidden")))
#else
    #define DLL_PUBLIC
    #define DLL_LOCAL
#endif

DLL_PUBLIC void My_OpenSSL_add_all_algorithms() {

    return (void)OpenSSL_add_all_algorithms();
}

DLL_PUBLIC void My_SSL_load_error_strings() {

    return (void)SSL_load_error_strings();
}
...

然后,使用-fvisibility = hidden标志进行编译,并链接libcrypto.a和libssl.a.只有标有DLL_PUBLIC的函数才会通过JNI导出和调用.

我认为不需要#if __GNUC__> = 4,因为Android提供的交叉编译工具是上面的GCC 4.0.事实上,我认为它目前是GCC 4.8.

Changing OpenSSL library in Android app for HttpClient

这个问题更难了.在共享包装器中提供更新的OpenSSL后,我不知道如何使用Android的HttpClient来使用它.

更糟糕的情况回答:您可能需要分叉Android并提供更新的OpenSSL.

一个可能更好的解决方案:删除HttpClient代码,将其放在您自己的包中,然后确保源代码的端口使用共享对象.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读