OpenSSL ,即open secure sockets layer,是一个开源的安全套接字层的密码库。包括常用的密码加解密算法、常用的密钥算法、证书管理和SSL协议。
OpenSSL 库主要包含三大部分:
openssl: 多用途的命令行工具,可以执行交互或批量命令。
libcrypto: 加解密算法库。
libssl:加密模块应用库,实现了ssl及tls。
OpenSSL 库主要实现对称加密与非对称加密、密钥证书管理的功能。
a、对称加密算法
OpenSSL 提供了8种对称加密算法,分别是AES、DES、Blowfish、CAST、IDEA、RC2、RC5、RC4。
b、非对称加密算法
OpenSSL提供了4种非对称加密算法,包括DH算法、RSA算法、DSA算法和椭圆曲线算法(EC)。DH一般用于密钥交换。RSA算法既可以用于密钥交换,也可以用于数字签名,但用于数据加密,RSA算法的速度比较慢。DSA算法则一般只用于数字签名。
OpenSSL实现了5种信息摘要算法,分别是MD2、MD5、MDC2、SHA(SHA1)和RIPEMD。
生成证书,颁发证书,吊销证书
OpenSSL库的下载,可以从GitHub上下载:https://github.com/openssl/openssl
OpenSSL库是用C语言实现的,可将其编译为库文件后再对其进行调用,可编译为静态库和动态库,编译安装的方法可以参考源码根目录的INSTALL文件和各个平台的NOTES文件。以下我们将简单介绍其在pc linux和嵌入式平台的快速编译安装方法。
例如在Ubuntu平台运行OpenSSL库。
使用命令:
./config --prefix=绝对路径安装目录
由于默认的安装路径是/usr/local,属于系统目录,安装在此目录下,该Linux环境都能使用OpensSSL的命令工具,但有时我们只是为了将OpenSSL编译为库文件,将其集成到我们的代码工程调用,而不像让当前的Linux安装OpenSSL命令,这时我们要先通过“--prefix”选项指定安装目录,方便我们将OpenSSL作为库使用。“--prefix”选项后带的是绝对路径。
eg:
./config --prefix=/home/hbguo/prj/openssl/release_x86_64_linux
命令:
make
命令:
make install
安装成功后,可以在“--prefix”指定的目录中看到bin目录、lib目录、include目录等。
使用命令:
./config no-asm --prefix=绝对路径安装目录 --cross-compile-prefix=交叉编译器的前缀
说明:
不同交叉编译器配置的./config选项可能不同,有些选项特定交叉编译器是不支持的,而默认就是开启的,需要把这些选项关闭才能编译通过,具体可以参考源码根目录的“INSTALL”文档关于config选项的说明,根据自己实际项目是否会使用这些功能来确定是否可以关闭。
eg:
a、使用arm-xilinx-gcc交叉编译器进行编译,如下配置可以编译通过,同时生成静态库和动态库。
./config no-asm --prefix=home/hbguo/prj/openssl/release_cross --cross-compile-prefix=arm-xilinx-linux-gnueabi-
(no-asm,指定不使用汇编代码)
b、使用arm-linux-gcc的交叉编译器,需要关闭更多选择才能编译通过,同时生成静态库和动态库。
./config no-asm no-tests no-fips no-capieng --prefix=/home/hbguo/prj/openssl/release_cross --cross-compile-prefix=arm-none-linux-gnueabi-
在编译之前,先确认要运行的嵌入式平台系统是多少位的,./config 生成的Makefile中,默认是支持64位的系统,如果是要在32位的系统上运行OpenSSL那么需要将Makefile文件中所有的将-m64选项全部删除掉。比如我是要在32位的mips架构嵌入式硬件上运行,需要删除Makefile文件中所有的将-m64选项。然后进行编译。
(另外,如果是使用arm-linux-gcc的交叉编译器,那么还要删除Makefile中的“defs”编译选项,不然编译报错,arm-linux-gcc编译器不支持该选项。)
最后进行编译,命令:
make
命令:
make install