编译安装国密版  OpenSSL(GmSSL)整体上不复杂,但关键是要避免与系统自带的  OpenSSL  发生冲突。下面为用户写一下完整的流程,尤其包含了  “与系统  OpenSSL  共存”这一关键的兼容性方案。

一、准备工作:安装依赖

首先,你需要安装编译所需的工具和库。

Debian/Ubuntu  系列:

        bash

        sudo  apt  update

        sudo  apt  install  -y  git  gcc  g++  make  cmake  libtool  autoconf

Red  Hat/CentOS  系列:

        bash

        sudo  yum  install  -y  git  gcc  gcc-c++  make  cmake  libtool  autoconf

为了与系统自带的  OpenSSL  隔离,建议安装  `libssl-dev`(Debian/Ubuntu)或  `openssl-devel`(CentOS/RHEL),但后续编译  GmSSL  时会通过  `--prefix`  参数指定独立安装路径。

二、编译安装:从源码到系统

完成依赖准备后,就可以开始编译安装了。

1.    获取源码:

        bash

        git  clone  https://github.com/guanzhi/GmSSL.git

        cd  GmSSL

2.    配置编译选项:

        GmSSL  3.0  以后主要使用  CMake  进行构建。以下是关键的配置参数,尤其注意  `CMAKE_INSTALL_PREFIX`  用于指定独立安装路径,以避免与系统  OpenSSL  冲突。

        bash

        mkdir  build  &&  cd  build

        cmake  ..  -DCMAKE_INSTALL_PREFIX=/usr/local/gmssl  \

                          -DBUILD_SHARED_LIBS=ON  \

                          -DENABLE_SM3_AVX_BMI2=ON  \

                          -DENABLE_SM4_AESNI_AVX=ON

                    `CMAKE_INSTALL_PREFIX`:  指定安装根目录。设置为  `/usr/local/gmssl`  可以将所有  GmSSL  相关文件(`bin`,  `lib`,  `include`)都装在这个独立文件夹下。

              `BUILD_SHARED_LIBS`:  设为  `ON`  生成动态库(`.so`  文件),方便程序链接。

              `ENABLE_SM3_AVX_BMI2`  /  `ENABLE_SM4_AESNI_AVX`:  如果你的  CPU  支持这些指令集,开启后能获得更好的性能。

        更多选项:GmSSL  也保留了  OpenSSL  传统的  `./config`  配置方式,其参数风格类似,例如  `--openssldir`  可指定  OpenSSL  配置目录。

3.    编译与安装:

        bash

        make  -j$(nproc)    #  -j$(nproc)  用于加速编译,充分利用CPU核心

        make  test                #  强烈建议运行,确保编译出的库功能正常

        sudo  make  install

三、验证与配置:确保安装成功

安装完成后,进行验证和配置。

1.    测试命令行工具:

        直接调用刚安装的  `gmssl`  程序来检查版本。

        bash

        /usr/local/gmssl/bin/gmssl  version

          如果能看到类似  `GmSSL  3.0.0-dev`  的版本信息,说明编译和安装基本成功。

2.    配置动态库路径:

        为了让系统能找到  GmSSL  的动态库(`libcrypto.so`  等),需要配置链接器。

        创建配置文件:

                bash

                sudo  bash  -c  'echo  "/usr/local/gmssl/lib"  >  /etc/ld.so.conf.d/gmssl.conf'

        更新缓存:

                ```bash

                sudo  ldconfig

  四、兼容性处理:与系统  OpenSSL  共存之道

这是最关键的一步。GmSSL  生成的动态库文件名与系统  OpenSSL  完全相同(都是  `libcrypto.so`  和  `libssl.so`),直接替换会导致系统严重依赖问题。因此,绝对不要使用默认的  `/usr/local`  或  `/usr`  路径。

我们通过上述的  `CMAKE_INSTALL_PREFIX=/usr/local/gmssl`  将所有  GmSSL  文件隔离,使用时有两种方法:

临时环境变量:在需要使用的终端会话中设置  `PATH`  和  `LD_LIBRARY_PATH`。

应用显式指定:在编译你自己的程序时,通过  `-I`  和  `-L`  参数显式指定头文件和库文件路径。

五、进阶配置:按需启用功能

开启性能测试:若需测试算法性能,在  CMake  配置阶段加上  `-DENABLE_TEST_SPEED=ON`,安装后可在  `/usr/local/gmssl/bin/`  下找到  `sm4test`、`sm3test`  等测试工具。

Java  接口支持:默认不编译  Java  接口,需要修改源码根目录下的  `Configure`  文件,将  `java`  目录添加到  `$config{dirs}`  数组中,然后重新编译。

交叉编译:GmSSL  官方文档提供了为  Android  和  iOS  等平台交叉编译的脚本,需要预先配置好对应的  SDK/NDK  环境。

硬件加速:在  CMake  配置阶段,你可以通过启用  `-DENABLE_SM3_AVX_BMI2`  和  `-DENABLE_SM4_AESNI_AVX`  等选项,为支持相关指令集的  CPU  开启硬件加速,显著提升  SM3  和  SM4  算法的性能。

构建与打包:GmSSL  利用  CPack  系统可以生成适用于不同  Linux  发行版的原生软件包(如  `.deb`  或  `.rpm`)。编译完成后,在  `build`  目录下执行  `cpack`  即可。

六、故障排查:常见问题

编译错误:通常是因为依赖缺失。请确认  `cmake`,  `gcc`,  `make`  等工具已正确安装,并尝试删除  `build`  目录后重新配置。

`gmssl:  command  not  found`:说明  `/usr/local/gmssl/bin`  不在你的  `PATH`  环境变量中。运行  `export  PATH=/usr/local/gmssl/bin:$PATH`  可临时解决,或将其写入  `~/.bashrc`  永久生效。

`error  while  loading  shared  libraries`:系统找不到  `.so`  文件。请确保已正确创建  `/etc/ld.so.conf.d/gmssl.conf`  文件并执行了  `sudo  ldconfig`  命令。