4. 环境准备:操作系统、数据库、SDK版本要求
说实话,准备环境这种事,看着简单,踩过的坑可真不少。我见过不少团队,SDK集成搞了大半天,最后发现是操作系统不兼容,或者数据库版本差了一个小版本号。白折腾。
所以这一章,咱们把环境要求彻底捋清楚。你照着准备,后面跑回归测试的时候就能少很多麻烦
4.1 操作系统支持矩阵
咱们这个加密SDK,主要跑在服务器端。我个人习惯,先在Linux上验证,再覆盖Windows。为什么?线上生产环境绝大多数是Linux,回归测试的重点也在这。
| 操作系统 | 版本要求 | 架构 | 备注 |
|---|---|---|---|
| CentOS | 7.9+ / 8.x | x86_64, ARM64 | 推荐7.9,生产环境最稳 |
| Ubuntu | 20.04 LTS / 22.04 LTS | x86_64, ARM64 | 开发环境首选,包管理方便 |
| Windows Server | 2019 / 2022 | x86_64 | 主要用于SDK二次开发和调试 |
| KylinOS (银河麒麟) | V10 | ARM64, x86_64 | 信创环境必须测 |
注意:别以为操作系统大版本一样就行。我曾经遇到过一个案例,CentOS 7.6和7.9,内核参数不一样,导致SDK的动态库加载失败。回归测试环境,尽量跟生产环境保持一致。
4.2 数据库版本兼容性
嗯,这里要重点说。加密SDK是跟数据库打交道的,数据库版本直接决定了能支持哪些加密特性。你想想看,MySQL 5.7和8.0的表空间加密方式就不一样。
我建议,你的回归测试环境,至少覆盖主流的两个大版本。
| 数据库 | 最低版本 | 推荐版本 | 加密特性支持 |
|---|---|---|---|
| MySQL | 5.7.31 | 8.0.28+ | 表空间加密、列加密(TDE插件) |
| PostgreSQL | 12.x | 15.x / 16.x | pgcrypto、列级加密外部扩展 |
| 达梦 DM8 | DM8 (2022.Q4+) | DM8 (2023.06+) | 透明加密、列加密,国密SM4支持 |
| OceanBase | 3.2.x | 4.1.x | 表加密、列加密(基于MySQL模式) |
避坑指南:我曾经在PostgreSQL 12上测试列加密一切正常,换到PG 14后发现加密函数性能下降30%。后来发现是PG 14改了底层内存管理。所以回归测试数据库版本不能只测一个,至少覆盖两个小版本。
4.3 SDK版本要求与依赖
SDK本身也有版本讲究。你不能拿个beta版直接上回归测试,也不能拿太老的版本,有些bug早就修了。
咱们的加密SDK,目前稳定版本是 v2.3.x 系列。回归测试必须基于这个系列。
| SDK组件 | 版本 | 依赖环境 | 说明 |
|---|---|---|---|
| 核心加密库 | v2.3.1+ | OpenSSL 1.1.1w / 3.0.12 | 国密SM2/SM3/SM4支持 |
| JDBC驱动插件 | v1.2.0 | 对应数据库JDBC驱动 | 替换标准JDBC驱动 |
| 加密管理组件 | v1.1.2 | Java 8 / Java 11 | 用于管理密钥和加密规则 |
| 日志审计模块 | v1.0.5 | log4j 2.x / logback | 非必须,但推荐集成 |
警告:JDK版本别搞错。加密管理组件如果跑在Java 8上,必须用u231以上版本。Java 8太老的版本,不支持的TLS协议,密钥协商会失败。我在项目里就因为这个查了两天。
4.4 网络与TLS版本要求
SDK跟数据库通信,或者跟密钥管理服务通信,都需要加密通道。有些老环境还在用TLS 1.0,那肯定不行。
- TLS最低版本: 1.2,推荐 TLS 1.3
- 禁用协议: SSLv2、SSLv3、TLS 1.0、TLS 1.1
- 密码套件: 支持 ECDHE + AES-GCM 优先
小技巧:你可以用
openssl s_client -connect 命令快速验证目标数据库的 TLS 版本。我习惯在回归测试环境搭建好之后,先跑一遍这个,确认网络层没问题。
4.5 一张图看懂环境准备
下面这张图,涵盖了整个环境准备的关键节点和检查项。你可以照着这张图,一步一步搭环境,避免遗漏。
4.6 一份快速检查清单
搭建环境的时候,对着这张清单打钩,能省不少事。
- 操作系统
- 确认内核版本:
uname -r - 确认glibc版本:
ldd --version - 确认防火墙已放行数据库端口
- 确认SELinux/AppArmor未拦截进程
- 确认内核版本:
- 数据库
- 确认数据库版本:
SELECT VERSION(); - 确认已安装加密插件或扩展
- 确认TLS版本:使用
openssl s_client -connect测试 - 确认字符集:推荐UTF-8
- 确认数据库版本:
- SDK
- 检查SDK版本号:
cat VERSION或 API打印 - 检查依赖库:
ldd libencrypt.so确认无缺失 - 检查JDK版本:
java -version - 检查CMake/gcc版本,如果有源码编译需求
- 检查SDK版本号:
- 网络
- 测试数据库连通性:
telnet ip port - 测试密钥管理服务连通性(如果有)
- 确认DNS解析正常
- 测试数据库连通性:
核心要点:环境准备不是一次性工作。每次回归测试开始前,重新跑一遍检查清单。工具版本会变,依赖会升级,唯有自动化检查是可靠的。我个人习惯把这份清单写成自动化脚本,每天定时跑一次,有问题即时告警。