OpenSSL 1.1.1的裁剪

简介: OpenSSL这个库,对于一个端上的sdk来说,算是一个比较大的库了,这里拿OpenSSL1.1.1在Android arm64来做说 全编译后libcrypto.a 4.7M, libssl.a 900多k,当然strip后会变小,我们这里就拿没strip的库来做大小对比 首先百度,Google, GitHub找一些别人裁剪的脚本进行尝试,有些是因为版本不一样,所以出错了,去掉不支持的选

OpenSSL这个库,对于一个端上的sdk来说,算是一个比较大的库了,这里拿OpenSSL1.1.1在Android arm64来做说
全编译后libcrypto.a 4.7M, libssl.a 900多k,当然strip后会变小,我们这里就拿没strip的库来做大小对比

首先百度,Google, GitHub找一些别人裁剪的脚本进行尝试,有些是因为版本不一样,所以出错了,去掉不支持的选项后,编译或链接的时候会失败,并且每个地方搜到的脚本并不太一样,也不见得符合我们的需求。
说下我们的需求,我们使用OpenSSL主要是用来在curl中支持https协议,并且其他地方有用到md5的计算和aes的加解密算法,如果你和我们的需求差不多,那么我们可以一起往下看了。

在搜索脚本使用失败后,被逼无奈,找找OpenSSL的源码里面有没有相关的说明不?还真找到了
请一起看源码里面的INSTALL文件,里面有裁剪相关的说明
这里面应该是有几类裁剪
首先是直接列出来名字的,如:

no-afalgeng no-async no-autoalginit no-autoerrinit ...

当然,这里的选项并不都是裁剪模块相关的,比如

no-pic no-shared

这里的是编译选项,no-pic是无法编译成动态库,no-shared是不编译动态库,这里要根据自己的需求选择了。如果你想编译成动态库,或者把静态库最终链接成动态库no-pic是不能选择的。

no-threads  Don't try to build with support for multi-threaded
                   applications.

是不使能多线程安全相关代码,我们升级到1.1.1的目的就是要使用其内部的线程安全功能,所以这个也不能选。

no-sock Don't build support for socket BIOs,

这个我们也不要选,这个是https中需要的。

这里面还有一个特殊的选项

  no-deprecated
                   Don't build with support for any deprecated APIs. This is the
                   same as using "--api" and supplying the latest version
                   number.

是不编译过时的api,请不要使用这个选项,如果加上会导致一些其他软件的链接问题,比如ffmpeg3.4中,使用了一些比较低版本的接口,如果加上这个选项,会导致ffmpeg编译不过,我看了下,这些版本兼容的api都是一些宏定义,或者一些接口转化,对最后的体积大小几乎没有任何影响。

然后这部分我这边的config是

no-afalgeng no-async no-autoalginit no-autoerrinit no-capieng
     no-cms no-dgram no-dynamic-engine no-engine no-ec no-ec2m no-filenames no-gost
     no-hw-padlock no-nextprotoneg no-ocsp no-psk no-rfc3779 no-srp no-srtp no-ts

下面一类是

no-<prot>

Don't build support for negotiating the specified SSL/TLS
                   protocol (one of ssl, ssl3, tls, tls1, tls1_1, tls1_2,
                   tls1_3, dtls, dtls1 or dtls1_2). If "no-tls" is selected then
                   all of tls1, tls1_1, tls1_2 and tls1_3 are disabled.
                   Similarly "no-dtls" will disable dtls1 and dtls1_2. The
                   "no-ssl" option is synonymous with "no-ssl3". Note this only
                   affects version negotiation. OpenSSL will still provide the
                   methods for applications to explicitly select the individual
                   protocol versions.

这些是tls和ssl相关的,是我们https协议中需要的,我们肯定不能全部去掉,最好全部留着,并且经过测试,发现去掉一些后,体积并没有多大变化,还是都留着比较放心,兼容性会更好。


  no-<alg>
                   Build without support for the specified algorithm, where
                   <alg> is one of: aria, bf, blake2, camellia, cast, chacha,
                   cmac, des, dh, dsa, ecdh, ecdsa, idea, md4, mdc2, ocb,
                   poly1305, rc2, rc4, rmd160, scrypt, seed, siphash, sm2, sm3,
                   sm4 or whirlpool.  The "ripemd" algorithm is deprecated and
                   if used is synonymous with rmd160.

上来全部去掉,编译后发现有些算法是必须的,所以把它们去掉了

no-des no-dh no-sock

另外有个选项文档里面并没有提到

no-dso

这个选项不加的话,iOS的app可能会不通过审核,因为是一个动态加载动态库的支持,苹果是不允许的。

经过这样的裁剪Android arm64的库
2.9M libcrypto.a
752K libssl.a
还是小了不少的。并且可以正常使用。

相关文章
|
8月前
|
缓存 算法 安全
[译] OpenSSL 3.0.0 设计
本文翻译 OpenSSL 官网文档:https://www.openssl.org/docs/OpenSSL300Design.htmlTongsuo-8.4.0 是基于 OpenSSL-3.0.3 开发,所以本文对 Tongsuo 开发者同样适用,内容丰富,值得一读!介绍本文概述了 OpenSSL 3.0 的设计,这是在 1.1.1 版本之后的 OpenSSL 的下一个版本。假设读者熟悉名为 &
170 0
[译] OpenSSL 3.0.0 设计
|
Ubuntu Linux 编译器
openssl 的编译(linux、Ubuntu) 和 交叉编译(arm、Hi3531A)的问题分析、解决
openssl 的编译(linux、Ubuntu) 和 交叉编译(arm、Hi3531A)的问题分析、解决
787 0
|
存储 算法 数据安全/隐私保护
【密码学】一文读懂白盒AES(Chow方案)(一)
本文主要参考了文献^[1], 代码参考了^[2], 这里感谢文献作者和代码作者,如果有能力的大佬,可以自行查看原文献,个人水平有限,有哪里写的不对的地方,也欢迎读者指正。
2673 0
【密码学】一文读懂白盒AES(Chow方案)(一)
|
算法 网络安全 对象存储
openssl编译参数选项
openssl编译参数选项
524 0
ffmpeg 视频裁剪 10秒内失败解决
ffmpeg 视频裁剪 10秒内失败解决
|
Ubuntu Linux API
klogd&syslogd与dmesg-嵌入式系统获取linux内核log
klogd&syslogd与dmesg-嵌入式系统获取linux内核log
654 0
klogd&syslogd与dmesg-嵌入式系统获取linux内核log
|
Rust Linux 编译器
Android中使用Rust构建so库
Android中使用Rust构建so库
Android中使用Rust构建so库
|
应用服务中间件 网络安全 数据安全/隐私保护
|
Linux C语言 内存技术
Linux下使用alsa-lib库完成音频开发: 实现放音和录音(从声卡获取PCM数据保存、向声卡写PCM数据输出)
Linux下使用alsa-lib库完成音频开发: 实现放音和录音(从声卡获取PCM数据保存、向声卡写PCM数据输出)
1138 0