本文属于《GmSSL国密加密算法库使用系列教程》之一,欢迎查看其它文章。
一、关于GmSSL
GmSSL是一个开源的密码工具箱,支持SM2/SM3/SM4/SM9/ZUC等国密(国家商用密码)算法、SM2国密数字证书及基于SM2证书的SSL/TLS安全通信协议,支持国密硬件密码设备,提供符合国密规范的编程接口与命令行工具,可以用于构建PKI/CA、安全通信、数据加密等符合国密标准的安全应用。GmSSL项目是OpenSSL项目的分支,并与OpenSSL保持接口兼容。因此GmSSL可以替代应用中的OpenSSL组件,并使应用自动具备基于国密的安全能力。GmSSL项目采用对商业应用友好的类BSD开源许可证,开源且可以用于闭源的商业应用。
GmSSL项目由北京大学关志副研究员的密码学研究组开发维护,项目源码托管于GitHub。自2014年发布以来,GmSSL已经在多个项目和产品中获得部署与应用,并获得2015年度“一铭杯”中国Linux软件大赛二等奖(年度最高奖项)与开源中国密码类推荐项目。GmSSL项目的核心目标是通过开源的密码技术推动国内网络空间安全建设。
以上内容摘抄自GmSSL官网:http://gmssl.org/
大家都知道OpenSSL,主要是提供国际加密算法库。但是在最新的OpenSSL 1.1.1以上版本,已经对国密算法提供了支持。
OpenSSL、GmSSL这俩提供的国密算法库,去看了下代码,代码实现是不一样的,属于条条大路通罗马。
二、解决与系统OpenSSL冲突的问题
GmSSL是支持国密算法和标准的OpenSSL分支,也就是说GmSSL是在OpenSSL代码基础上添加的国密算法。
因此为了兼容OpenSSL,GmSSL编译后生成的so文件名称与OpenSSL一致,都是libcrypto.so。
可能存在的问题:
Linux上很多软件都依赖于系统中的OpenSSL库。若你编译安装的GmSSL版本,其基于的OpenSSL分支版本,与系统中的OpenSSL版本不一致,便会产生冲突,很容易导致这些软件不可用。
最简单有效的办法:将GmSSL编译为静态库。
GmSSL命令行工具,以及我们基于该静态库开发的程序,直接内部就集成了GmSSL的二进制码,不需要去查找库了,也就不会与系统中OpenSSL产生冲突。
在安装GmSSL时,安装到指定的目录下,如/usr/local/gmssl,与系统中OpenSSL路径保持独立。
这样,即从文件路径和运行时,两方面保证了GmSSL与OpenSSL不会冲突,并保持使用上的相互独立性。这的确是最完美的解决办法。
三、GmSSL源码准备
下载GmSSL源码:https://github.com/guanzhi/GmSSL
四、编译与安装GmSSL
以下测试环境为Ubuntu 16.04。
1、解压并进入目录
解压源码
unzip GmSSL-master.zip
进入源码目录
cd GmSSL-master/
2、编译选项
配置安装路径,编译为静态库
./config --prefix=/usr/local/gmssl --openssldir=/usr/local/gmssl no-shared
注:–prefix表示安装路径;no-shared 表示只编译静态库;默认生成64位库。
此条命令若出错,可参考https://blog.csdn.net/weixin_43716504/article/details/126095234,修改Configure、test/build.info文件后,即可解决。
3、编译
make
4、安装
make install
若报错:
Cannot create directory /usr/local/gmssl: No such file or directory
是因为当前用户无权限对该路径进行写入。
再次执行如下,即可解决。
sudo make install
GmSSL安装目录如下:
5、配置环境变量
在~/.bashrc文件中,添加GmSSL命令行工具路径。
vim ~/.bashrc
在文件末尾追加如下内容:
export PATH=$PATH:/usr/local/gmssl/bin
然后执行
source ~/.bashrc
输入命令,查看GmSSL版本
gmssl version -a
并且与OpenSSL不冲突,至此,GmSSL安装完毕。
若对你有帮助,欢迎点赞、收藏、评论,你的支持就是我的最大动力!!!
同时,阿超为大家准备了丰富的学习资料,欢迎关注公众号“超哥学编程”,即可领取。