OpenSSL
1.1、OpenSSL简介
是什么 ?:a free implementation of TLS/SSL and crypto library.
开发语言:C
官方主页:https://www.openssl.org
源码仓库:https://github.com/openssl/openssl

OpenSSL出现过几次漏洞,但它仍然是在安全方面使用最多的加密库之一。

1.2、通过包管理器安装OpenSSL
操作系统包管理器安装命令
Windowsscoopscoop install openssl
WindowsChocolateychoco install -y OpenSSL.Light
macOSHomeBrewbrew install openssl
GNU/LinuxLinuxBrewbrew install openssl
aptsudo apt-get install -y openssl
CentOSyumsudo yum install -y openssl openssl-devel
dnfsudo dnf install -y openssl openssl-devel
openSUSEzyppersudo zypper install -y openssl
Alphine Linuxapksudo apk add openssl openssl-dev

Arch Linux

ArcoLinux

Manjaro Linux

yaysudo yay -Syyu --noconfirm
sudo yay -S    --noconfirm openssl
Gentoo LinuxPortagesudo emerge openssl
1.3、通过源码安装OpenSSL 

step1、安装依赖

下载时git
编译时POSIX shGNU CoreUtilsmakemakedependgccPerlToolSet
运行时glibc ( libc.solibdl.solibpthread.sold-linux-x86-64.so )

step2、使用git下载OpenSSL源码

git clone https://github.com/openssl/openssl.git

step3、进入openssl目录

cd openssl

step4、查看有哪些git分支

git branch -a

运行效果如下:

step5、切换到一个稳定的git分支

由于OpenSSL项目的master分支上提交的是开发代码,它可能不稳定。最好切换到最新的稳定版本分支上面, 最新的稳定版本分支是OpenSSL_1_1_1-stable

git checkout OpenSSL_1_1_1-stable

step6、查看当前git分支的源码

step7、配置编译参数

此工程与autotools创建的工程不一样,没有configureconfigure.acconfig.guess等文件,而是多了Configureconfig两个可执行的POSIX sh脚本。 这两个可执行的POSIX sh脚本就是用来配置编译参数的。用它们 配置后会产生make的配置文件Makefile

./Configure的使用格式如下:

./Configure [option]... <os/compiler>

os/compiler可以通过执行./Configure LIST命令获得。

如果你想交叉编译,就必须通过调用./Configure,指明os/compiler为目标平台。

./config的使用格式如下:

./config [option]...

./config可执行脚本的功能与autotools中的config.guess一样, 就是猜测当前环境中的os/compiler,然后调用./Configure

option说明
--help查看使用帮助
--prefix=DIR设置安装目录
--openssldir=DIR设置安装目录
--cross-compile-prefix=XX交叉编译工具链的前缀
-D<MACRO[=VALUE]>定义一个宏
-l<libraryName>指定需要的库名称
-L<linkDir>增加库文件搜索目录
-f<PIC>
-K<PIC>
no-ssl2禁用SSLv2协议
no-ssl3禁用SSLv3协议
no-ssl禁用SSL协议
no-tls禁用TLS协议
no-md2禁用MD2算法
no-md4禁用MD4算法
no-md5禁用MD5算法
no-mdc2禁用mdc2算法
no-ripemd禁用ripemd算法
[no-]des禁用DES算法
[no-]aes禁用AES算法
[no-]rc2禁用rc2算法
[no-]rc4禁用rc4算法
[no-]rc5禁用rc5算法
[no-]idea禁用IDEA算法
[no-]bf禁用Blowfish算法
[no-]cast禁用cast算法
[no-]camellia禁用camellia算法
[no-]dsa禁用DSA算法
[no-]rsa禁用RSA算法
[no-]ec禁用ec算法
[no-]ecdsa禁用ecdsa算法
[no-]dh禁用dh算法
[no-]ecdh禁用ecdh算法
[no-]asm是否使用汇编语言
[no-]async
[no-]shared控制是否要生成动态库
[no-]dso控制是否要调用其他动态库
[no-]comp
[no-]store
[no-]threads是否支持多线程的库
[no-]gmp是否支持gmp
[no-]krb5是否支持Kerberos 5
[no-]rfc3779启用/禁用实现X509v3证书的IP地址扩展
no-zlib不使用zlib压缩功能
zlib使用zlib静态库
zlib-dynamic使用zlib动态库
no-hw关闭硬件支持
no-engine关闭硬件支持

示例:

./config    shared no-ssl2 no-ssl3 no-comp no-hw no-engine
./Configure shared no-ssl2 no-ssl3 no-comp no-hw no-engine darwin64-x86_64-cc

step7、使用make进行编译

make [option]... [VAR=VALUE]... [TARGET]...
VARVALUE示例说明
CCgcc |  clang指定C编译器命令
CFLAGS-O2 -v指定C编译器命令的参数
CPPcpp指定C预处理器命令
CPPFLAGS-I<includeDir>指定C预处理器命令的参数
LDFLAGS-L<libDir>指定C链接器命令的参数
LIBS-l<libName>指定C链接器要链接的库的名称

示例:

CPUCoreCount=$(grep -c processor /proc/cpuinfo)
jobCount=$((CPUCoreCount + 1))

make -j${jobCount} CFLAGS="-O2 -v"

step8、安装

sudo make install
1.4、OpenSSL中包含的命令
1.5、OpenSSL中包含的头文件
1.6、OpenSSL中包含的库文件
  • libssl.{a | so | dylib}
  • libcrypto.{a | so | dylib}
1.7、通过Android NDK交叉编译OpenSSL

step0、参考工程根目录下的NOTES.ANDROID

step1、与1.3、通过源码安装OpenSSL的前6个步骤一样

step2、安装Android NDKversion >= r19

step3、使用curl命令下载我已经写好的编译脚本:

curl -LO https://raw.githubusercontent.com/leleliu008/auto/master/ndk/build-with-ndk-openssl.sh

step4、运行build-with-ndk-openssl.sh脚本

sh build-with-ndk-openssl.sh

生成的产物在output目录下: