3. 测试环境搭建:操作系统选择、国密库安装与编译
到了第三章,咱们得把真正干活的环境搭起来。
说实话,很多人在国密接口测试上栽跟头,不是不会写代码,而是环境先没搞对。
我个人习惯是先想清楚用哪个系统、装哪个库,再去动手。不然装到一半发现依赖冲突,那才叫头疼。
3.1 操作系统选择——别小看这一步
国密环境对操作系统其实有隐形的偏好。
你想想看,如果你用的是 Windows,后面编译 GMSSL 的坑会多到你怀疑人生。
我建议优先选 Linux,最好是 CentOS 7.x 或 Ubuntu 20.04 LTS。
为什么?
| 操作系统 | 适合程度 | 常见问题 |
|---|---|---|
| CentOS 7.9 | ★★★★★ | 依赖库稳定,跟生产环境一致 |
| Ubuntu 20.04 | ★★★★☆ | 包更新快,但部分国密库需要手动打补丁 |
| 银河麒麟 | ★★★★☆ | 原生支持国密,但社区资源少 |
| Windows 10/11 | ★★☆☆☆ | 编译环境难配,动态库兼容性差 |
3.2 编译器与基础依赖准备
装国密库之前,先把编译器搞定。
说白了,就是 gcc、g++、make、cmake 这几个。
我在 Ubuntu 上的标准操作:
sudo apt update
sudo apt install -y build-essential cmake git libssl-dev
如果是 CentOS:
sudo yum groupinstall -y "Development Tools"
sudo yum install -y cmake openssl-devel
3.3 GMSSL 的安装与编译
GMSSL 是国密生态里最常用的开源库。
我最早接触国密项目时,就是被 GMSSL 折腾了一整天,后来发现是版本选错了。
步骤其实不复杂:
- 从 GitHub 拉代码
- 切到稳定分支
- 执行传统三件套:
./config、make、make install
具体命令:
git clone https://github.com/guanzhi/GmSSL.git
cd GmSSL
git checkout master
./config
make -j$(nproc)
sudo make install
我这里多说一句:./config 的时候,建议加上 --prefix=/usr/local/gmssl。
为什么?方便后面多版本共存,也方便卸载。
你想想看,万一你后面要测 OpenSSL 国密模块,两个库装在一起,没分开目录那不乱套了吗?
openssl 命令被 GMSSL 替换了,导致一堆服务起不来……那叫一个惨。
3.4 OpenSSL 国密模块——另一种选择
除了 GMSSL,OpenSSL 从 1.1.1 开始也支持国密了。
但它默认不开启,需要手动编译时加上 enable-ec_nistp_64_gcc_128 和 enable-sm2、enable-sm3、enable-sm4 这些参数。
我个人习惯用 GMSSL 做主测试,OpenSSL 国密模块做交叉验证。
编译 OpenSSL 国密模块的命令:
wget https://www.openssl.org/source/openssl-1.1.1w.tar.gz
tar -xzf openssl-1.1.1w.tar.gz
cd openssl-1.1.1w
./config enable-sm2 enable-sm3 enable-sm4 \
--prefix=/usr/local/openssl-gm
make -j$(nproc)
sudo make install
~/.bashrc 里加个别名,方便在两个库之间切换:
alias gmssl='LD_LIBRARY_PATH=/usr/local/gmssl/lib /usr/local/gmssl/bin/gmssl'
alias openssl-gm='LD_LIBRARY_PATH=/usr/local/openssl-gm/lib /usr/local/openssl-gm/bin/openssl'
这样一来,测试时直接敲 gmssl 或 openssl-gm 就行了。
3.5 验证安装是否成功
装完别急着跑。先验证一下。
我通常用这三条命令:
- 验证 SM2 可用:
gmssl sm2keygen -pass 1234 -out sm2.pem - 验证 SM3 哈希:
echo -n "abc" | gmssl sm3 - 验证 SM4 加解密:
gmssl sm4 -e -in plain.txt -out cipher.bin -key 0123456789abcdeffedcba9876543210
如果你能顺利跑出结果,那环境就算搭好了。
如果报错说找不到 libssl.so 什么的,八成是动态库路径没配。
解决方法:export LD_LIBRARY_PATH=/usr/local/gmssl/lib:$LD_LIBRARY_PATH
sm4 -e 一直报错,查了半天发现是密钥长度写错了。SM4 密钥必须是 16 字节十六进制串,少一位都不行。嗯,这种细节后面测试的时候会反复踩。
3.6 本章核心知识结构
我把整章内容整理成一张图,方便你对照着搭环境:
嗯,到这步,你的测试环境基本就绪了。
后面章节开始,我们就要用这个环境去真刀真枪地测接口了。
记住:环境搭建越仔细,后面踩坑越少。别急着跳步骤,稳住。