写在前面
安装最新版的OpenSSL——也就是1.1.1a版本的原因是,最近的项目需要用到国密算法,需要在代码中调用国密SM4算法的加解密库函数来实现一些功能。实际上目前已经有针对国密算法开发的开源密码工具箱——GmSSL,但是由于我在编译Java API和PHP API未能成功,只能成功编译安装最基本的GmSSL,失去了编程语言的扩展性,故放弃了采用GmSSL。但是在最新版的OpenSSL 1.1.1a中,已经收录了GmSSL实现的国密算法(SM2/SM3/SM4),详见OpenSSL开发日志。因而我就选择直接安装OpenSSL来解决项目中的问题。
目前我所尝试的OpenSSL 1.1.1a的安装,仅在Ubuntu 18.04版本下实际测试运行,如果使用其他Ubuntu版本或其他Linux发行版,本文仅做参考。
还要指出的是,Ubuntu 18.04预装了OpenSSL 1.1.0g,本文内容中并未将其卸载,而是仅安装了OpenSSL 1.1.1a。
安装流程
在系统安装完成之后,首先同步最新的软件包
sudo apt-get update
然后安装编译过程中必要的工具——gcc
和make
工具
sudo apt-get install gcc
sudo apt-get install make
如果此时查看OpenSSL版本
openssl version
如果是Ubuntu 18.04版本,会显示版本为1.1.0g。
gcc和make工具安装完成后,下载OpenSSL 1.1.1a的源码,OpenSSL的下载页面为https://www.openssl.org/source/
下载OpenSSL 1.1.1a的源码,可在任意文件目录下载,此下载地址为官网地址,国内网络访问可能较慢
wget https://www.openssl.org/source/openssl-1.1.1a.tar.gz
下载完成后进行解压
tar zxvf openssl-1.1.1a.tar.gz
进入解压后的文件目录
cd openssl-1.1.1a
接下来进行编译和安装
./config
make
sudo make install
编译安装之后,并未完全完成,如果此时查看OpenSSL版本,就会发现还差一步。执行查询OpenSSL版本的命令后,可能会显示没有找到OpenSSL 1.1.1a版本,而不是直接显示版本。
此时需要修改配置文件,配置文件路径为/etc/ld.so.conf
sudo vim /etc/ld.so.conf
如果不习惯vim
,或者尚未安装vim
,自行使用gedit
在配置文件后添加OpenSSL 1.1.1a的安装目录
/usr/local/bin
/usr/local/lib
/usr/local/ssl
保存退出,最后执行命令
sudo ldconfig
此时查看OpenSSL版本,即显示1.1.1a。至此OpenSSL 1.1.1a安装完成,可以直接使用命令行工具或者用OpenSSL库用C语言进行开发。
结语
目前尚不清楚在未卸载旧版本的情况下安装新版本有什么弊端。正如前文所说,我安装OpenSSL 1.1.1a的目的是利用最新版中增加的国密算法,且使用其他编程语言调用,所以对我来说这还未结束。本文仅介绍OpenSSL 1.1.1a的安装,我后续还安装了PHP环境,调用了OpenSSL中的相关工具库,详情请移步Ubuntu 18.04下安装Apache和PHP环境,并使用最新版OpenSSL 1.1.1a。