Android openssl3.0.x编译和使用

本文档详细介绍了如何在Ubuntu 20.04环境下编译openssl3.0.x,包括前提准备、编译环境设置、编译过程、一键编译脚本的使用,以及编译完成后静态库的使用方法,特别提到了在NDK 22+版本中遇到的问题和解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Android openssl3.0.x编译和使用

1、前提准备

编译需要在linux环境下进行,笔者使用的是vmware虚拟机安装ubuntu 20.04进行编译,虚拟机的安装和ubuntu的安装这里就不详细说明了,可自行百度。

vmware官网下载地址

ubuntu 20.04下载地址

2、编译环境

openssl编译需要提前安装所需要的环境,这一点在openssl官网文档中有说明。Android编译说明openssl/NOTES-ANDROID.md at master · openssl/openssl · GitHub,下面直接给出需要安装的环境

sudo apt update
sudo apt upgrade
sudo apt install make
sudo apt install build-essential
sudo apt install perl

3、开始编译

在编译前还需要下载Android NDK和openssl,下载然后解压。

wget https://www.openssl.org/source/openssl-3.0.5.tar.gz
tar -zxvf openssl-3.0.5.tar.gz
wget https://dl.google.com/android/repository/android-ndk-r22b-linux-x86_64.zip
unzip android-ndk-r22b-linux-x86_64.zip

编译openssl,此前笔者使用的是DNK-r20b编译的,开始在Android Studio上使用的是DNK 21版本进行开发,打包没出现问题,但后面升级到NDK 22+后出现无法打包的情况。 根据提示编译需要添加 -fPIC ,在此记录一下。

export ANDROID_NDK_ROOT=/home/wgc/Android/android-ndk-r22b
PATH=$ANDROID_NDK_ROOT/toolchains/llvm/prebuilt/linux-x86_64/bin:$ANDROID_NDK_ROOT/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin:$PATH
./Configure android-arm64 -D__ANDROID_API__=21 -static no-shared no-tests -fPIC --prefix=${OUTPUT_PATH}
make && make install

4、一键编译

以上只是编译一个架构的静态库,如果需要其他架构还需重复编译,不够便捷,这里提供一个一键编译的版本。新建一个 build_openssl3.x.sh的文件,将以下内容复制到文件中,然后用命令执行 sh build_openssl3.x.sh即可。

#!/bin/bash -e

sudo apt update
sudo apt upgrade
sudo apt install make
sudo apt install build-essential
sudo apt install perl

#编译修改下面四个属性开始
OPENSSL_VERSION=3.0.5
#NDK23及以后下载和解压需要修改,注意下面注释掉的内容和说明
NDK_VERSION=android-ndk-r22b
ANDROID_TARGET_API=21
#需要编译的架构  如果执行报数组错误  请使用 sudo dpkg-reconfigure dash  出现画面选择 否
ANDROID_ABI_ARRAY=(armeabi armeabi-v7a arm64-v8a x86 x86_64)  #所有架构(armeabi armeabi-v7a arm64-v8a x86 x86_64 mips mips64)
#编译修改下面四个属性结束


WORK_PATH=$(cd "$(dirname "$0")";pwd)
ANDROID_NDK_PATH=${WORK_PATH}/${NDK_VERSION}
OPENSSL_SOURCES_PATH=${WORK_PATH}/openssl-${OPENSSL_VERSION}

if [ ! -e openssl-${OPENSSL_VERSION}.tar.gz ]
 then
    echo "openssl 压缩包不存在"
    wget https://www.openssl.org/source/openssl-${OPENSSL_VERSION}.tar.gz
fi


if [ ! -d openssl-${OPENSSL_VERSION} ]
 then
    echo "openssl 目录不存在"
    tar -zxvf openssl-${OPENSSL_VERSION}.tar.gz
fi

if 
<think>好的,用户现在想查找与OpenSSL 1.1.x版本相关的技术资料问题解决方法。首先,我需要确定OpenSSL 1.1.x的官方文档在哪里。通常,官方网站会有详细的文档,所以应该先引导用户去官网查看。 然后,用户可能需要具体的配置或编译指导,比如在Android环境下编译OpenSSL 1.1.1f的例子。之前用户提到的引用[2]中有相关的编译命令,应该引用这个例子帮助用户。 另外,常见问题部分需要考虑用户在使用过程中可能遇到的典型问题,比如版本兼容性、API变更等。例如,引用[1]提到修复了OpenSSL 3.0.x的问题,但用户问的是1.1.x,可能需要说明两者之间的差异,或者提醒用户在升级时注意兼容性问题。 用户可能还需要社区资源的链接,比如GitHub仓库邮件列表,这样他们可以进一步查找资料或提问。此外,书籍推荐可能对深入理解有帮助,不过要确保推荐的书籍确实涵盖1.1.x版本。 生成相关问题时,要覆盖文档获取、编译问题、与3.0的差异、安全漏洞查找以及Android编译问题,这些都是用户可能关心的后续问题。需要确保每个问题都紧扣用户的需求,并且引导他们找到答案。 最后,检查所有链接是否有效,格式是否正确,特别是LaTeX部分是否符合要求,但在这个回答中可能用不到数学公式,所以主要注意引用标识代码块的正确格式。</think>### OpenSSL 1.1.x 版本文档与问题解决方法 #### 1. 官方文档与资源 - **官方文档**:OpenSSL 1.1.x 的完整文档可通过其[官方手册](https://www.openssl.org/docs/man1.1.1/)获取,涵盖API使用、加密算法、命令行工具等[^1]。 - **版本特性**:1.1.x 系列引入多线程支持改进、算法优化(如ChaCha20/Poly1305)以及废弃部分旧API(如SSLv3)。 #### 2. 编译与配置示例 对于Android平台编译,可使用以下命令(以1.1.1f为例): ```bash ./Configure android-arm -D__ANDROID_API__=23 --prefix=/path/to/output ``` 编译后需验证库文件是否生成正确[^2]。 #### 3. 常见问题与解决 - **API变更问题**:1.1.x 版本中,部分函数(如`SSL_library_init()`)被标记为弃用,建议改用`OPENSSL_init_ssl()`。 - **兼容性问题**:若从1.0.x升级,需检查代码中是否依赖旧API,例如`EVP_CIPHER_CTX`结构体从堆分配改为栈分配。 - **编译错误**:若遇到OpenSSL 3.0.x的兼容性问题(如符号冲突),可检查编译脚本是否明确指定了1.1.x版本。 #### 4. 社区与扩展资源 - **GitHub仓库**:[OpenSSL GitHub](https://github.com/openssl/openssl) 提供1.1.x分支的代码与历史Issues。 - **邮件列表**:通过[openssl-users邮件列表](https://mta.openssl.org)可查询历史讨论或提问。 - **书籍推荐**:*Network Security with OpenSSL* 涵盖1.1.x版本的核心概念。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值