1. 遇到的问题
项目上需要用到SM4、SM2等国密算法,因此需要在Ubuntu18.04上安装GmSSL库。
然而笔者在第一次以动态库的形式对GmSSL进行编译与安装,踩了大坑! GmSSL以动态库的形式进行编译时,同时会生成openssl.so的动态库文件;该生成的openssl.so会与系统自己的openssl.so动态库产生冲突。openssl.so是操作系统所依赖的重要库文件,包括联网等活动都会受其影响。笔者的这次安装约等于将整个系统整崩了。。。
2 . 解决方法
以静态库的形式对GmSSL进行编译与安装,解决与系统OpenSSL的兼容问题。
具体步骤:
1)GmSSL下载
2)unzip master.zip
3)cd GmSSL-master/
4)./config --prefix=/usr/local/gmssl --openssldir=/usr/local/gmssl no-shared 注:--prefix表示安装路径;no-shared 表示只编译静态库
5)make & make install
6)sudo vi /etc/profile 在文件末尾追加 export PATH="$PATH:/usr/local/gmssl/bin"
7)source /etc/profile
8)分别查看系统OpenSSL与安装的GmSSL的版本信息,可以看到二者是兼容的
9)应用程序使用GmSSL库进行编译的方法:gcc -o sm4_serv sm4_serv.c -I/usr/local/gmssl/include -L/usr/local/gmssl/lib -lcrypto -lssl -ldl 注:末尾的-ldl必须要加上。