概述
OpenSSL 是一个健壮的、商业级的、功能齐全的开源工具包,用于传输层安全协议(TLS, Transport Layer Security),以前称为安全套接字层(SSL, Secure Sockets Layer)协议。协议实现基于一个完整的通用加密库,该库也可以独立使用。
OpenSSL 是 Eric A. Young 和 Tim J. Hudson 由 SSLeay 库开发演变而来的。
OpenSSL 项目官方网址:https://www.openssl.org
OpenSSL toolkit 包含:
- libssl 所有 TLS 协议的实现 (TLSv1.3)
- libcrypto 一个全强度通用加密库。它构成 TLS 实现的基础,但也可以独立使用。
- openssl OpenSSL 命令行工具,一把瑞士军刀,用于加解密任务,测试与分析。
下载
量产使用
可以从 https://www.openssl.org/source 下载官方发行版本的源码压缩包。
最新的稳定版本是支持到 2026 年 9 月 7 日的 3.0 系列,这也是一个长期支持(LTS, Long Term Support)版本。先前的 LTS 版本(1.1.1系列)也可用,并支持到 2023 年 9 月 11 日。所有旧版本(包括1.1.0、1.0.2、1.0.0 和 0.9.8)现在都不受支持,不应使用。OpenSSL 官方鼓励这些旧版本的用户尽快升级到 3.0。
扩展阅读:OpenSSL 3.0 正式发布
也可以直接使用 wget
命令下载:
wget https://www.openssl.org/source/old/1.1.1/openssl-1.1.1f.tar.gz
开发及测试使用
这里面的“开发及测试”主要是指针对 OpenSSL 项目本身而言。虽然理论上也可以使用源码压缩包进行测试和开发,但拥有一个包含整个项目历史的 git 仓库的本地副本,可以让您更深入地了解代码库。
- 官方 OpenSSL Git 仓库:https://git.openssl.org
- GitHub 镜像:https://github.com/openssl/openssl
每次前者有提交时它都会自动更新。
编译
当下载了源码包,解压缩之后,务必先阅读一下 INSTALL
文件,里面有关于交叉编译的关键信息点。
-
解压缩源码包
tar -xvf openssl-1.1.1f.tar.gz
-
确保交叉编译器已经配置在
$PATH
环境变量中,在该示例中aarch64-linux-gcc
编译器位于/opt/toolchains/.../bin
目录下:export PATH=$PATH:/opt/toolchains/aarch64--glibc--stable-2020.08-1/bin
-
交叉编译指令
./config no-asm --prefix=/usr --cross-compile-prefix=aarch64-linux-
no-asm
: 在交叉编译过程中不使用汇编代码代码加速编译过程--prefix
: 指定生成的头文件及库的路径,不修改此项则默认为/usr/local
目录--cross-compile-prefix
: 指定交叉编译工具链命令的前缀,很可能必须以破折号结尾,例如aarch64-linux-
将 GNU 编译器作为aarch64-linux-gcc
调用,等等。
-
修改 Makefile 文件,将
-m64
移除,否则会出现编译报错:aarch64-linux-gcc.br_real: error: unrecognized command line option '-m64'
-
移除后保存 Makefile,就可以继续执行编译了:
make make DESTDIR=/tmp/sysroot install
最后,在该示例中 openssl 生成在 /tmp/sysroot
目录下。关于 DESTDIR 的详细信息可参考官方说明或「交叉编译 libcap」中的示例。
欢迎关注我的公众号:飞翔的小黄鸭
也许会发现不一样的风景
▽ \bigtriangledown ▽ 交叉编译 CURL