安装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

==码云(推荐):==https://gitee.com/jkuang/GmSSL?_from=gitee_search

四、编译与安装GmSSL

1、解压并进入目录(如果是git clone的直接进入目录就可以了)
解压源码

unzip GmSSL-master.zip

进入源码目录

cd GmSSL-master/

2、编译选项
配置安装路径,编译为静态库

./config --prefix=/usr/local/gmssl --openssldir=/usr/local/gmssl no-shared

注:–prefix表示安装路径;no-shared 表示只编译静态库;默认生成64位库。

3、编译

make

4、安装

make install

若报错:

Cannot create directory /usr/local/gmssl: No such file or directory

是因为当前用户无权限对该路径进行写入。

再次执行如下,即可解决。

sudo make install

五、配置环境变量

在~/.bashrc文件中,添加GmSSL命令行工具路径。

vim ~/.bashrc

在文件末尾追加如下内容:

export PATH=$PATH:/usr/local/gmssl/bin

然后执行

source ~/.bashrc

输入命令,查看GmSSL版本

gmssl version -a

出现如下画面:

[root@10-18-93-202 GmSSL]# gmssl version -a
GmSSL 2.5.4 - OpenSSL 1.1.0d  19 Jun 2019
built on: reproducible build, date unspecified
platform: linux-x86_64
compiler: gcc -DDSO_DLFCN -DHAVE_DLFCN_H -DNDEBUG -DOPENSSL_THREADS -DOPENSSL_NO_DYNAMIC_ENGINE -DOPENSSL_PIC -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DRC4_ASM -DMD5_ASM -DAES_ASM -DVPAES_ASM -DBSAES_ASM -DGHASH_ASM -DECP_NISTZ256_ASM -DPADLOCK_ASM -DGMI_ASM -DPOLY1305_ASM -DOPENSSLDIR="\"/usr/local/gmssl\"" -DENGINESDIR="\"/usr/local/gmssl/lib/engines-1.1\""  -Wa,--noexecstack
OPENSSLDIR: "/usr/local/gmssl"
ENGINESDIR: "/usr/local/gmssl/lib/engines-1.1"

并且与OpenSSL不冲突,至此,GmSSL安装完毕。