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 一张图看懂环境准备

下面这张图,涵盖了整个环境准备的关键节点和检查项。你可以照着这张图,一步一步搭环境,避免遗漏。

数据库加密SDK集成回归测试 - 环境准备工作流 环境准备工作流 明确回归测试场景 操作系统层 CentOS/Ubuntu/KylinOS 数据库层 MySQL/PostgreSQL/达梦 SDK/依赖层 核心库+JDBC+管理组件 操作系统验证 内核参数/依赖库/权限 数据库验证 版本/TLS/加密插件 SDK验证 版本/依赖冲突/签名 多环境集成验证 模拟真实业务场景,跑回归测试套件 输出环境准备报告 💡 说明: 每个环境层验证通过后,再做集成验证。切记不要跳过单层验证直接做集成,排查问题成本会增加好几倍。

4.6 一份快速检查清单

搭建环境的时候,对着这张清单打钩,能省不少事。

  1. 操作系统
    • 确认内核版本:uname -r
    • 确认glibc版本:ldd --version
    • 确认防火墙已放行数据库端口
    • 确认SELinux/AppArmor未拦截进程
  2. 数据库
    • 确认数据库版本:SELECT VERSION();
    • 确认已安装加密插件或扩展
    • 确认TLS版本:使用openssl s_client -connect测试
    • 确认字符集:推荐UTF-8
  3. SDK
    • 检查SDK版本号:cat VERSION 或 API打印
    • 检查依赖库:ldd libencrypt.so 确认无缺失
    • 检查JDK版本:java -version
    • 检查CMake/gcc版本,如果有源码编译需求
  4. 网络
    • 测试数据库连通性:telnet ip port
    • 测试密钥管理服务连通性(如果有)
    • 确认DNS解析正常
核心要点:环境准备不是一次性工作。每次回归测试开始前,重新跑一遍检查清单。工具版本会变,依赖会升级,唯有自动化检查是可靠的。我个人习惯把这份清单写成自动化脚本,每天定时跑一次,有问题即时告警。