一、功能简介v4.0.0 为 gt-checksum 和 repairDB 同时新增了 SSL/TLS 加密连接支持。通过 8 个新增配置参数源端和目标端可以独立配置各自的 SSL 证书和加密模式。参数说明gt-checksum 参数源端 目标端参数名 可选值 默认值 说明srcSslCa 文件路径 空 源端 CA 证书文件路径srcSslCert 文件路径 空 源端客户端证书文件路径srcSslKey 文件路径 空 源端客户端密钥文件路径srcSslMode 见下表 PREFERRED 源端 SSL 模式dstSslCa 文件路径 空 目标端 CA 证书文件路径dstSslCert 文件路径 空 目标端客户端证书文件路径dstSslKey 文件路径 空 目标端客户端密钥文件路径dstSslMode 见下表 PREFERRED 目标端 SSL 模式repairDB 参数仅目标端参数名 说明dstSslCa 目标端 CA 证书文件路径dstSslCert 目标端客户端证书文件路径dstSslKey 目标端客户端密钥文件路径dstSslMode 目标端 SSL 模式为什么 repairDB 只有目标端参数 repairDB 是修复工具只连接目标端数据库执行修复 SQL不需要源端连接因此只需配置目标端 SSL 参数。SSL 模式说明模式 说明 需要 CA 证书DISABLED 禁用 SSL不加密连接 否PREFERRED 优先使用 SSL服务端不支持时回退到非加密连接 否REQUIRED 必须使用 SSL 加密但不验证服务端证书 否VERIFY_CA 验证服务端 CA 证书链 是VERIFY_IDENTITY 验证 CA 证书链和服务端身份主机名 是使用方式非常简单在配置文件 gc.conf 中添加几行即可; 最小配置仅要求加密不验证证书srcSslModeREQUIREDdstSslModeREQUIRED二、功能作用及使用场景深入解读2.1 为什么需要 SSL 加密连接在数据校验和修复场景中gt-checksum 需要从源端和目标端大量读取数据进行比对。如果连接未加密数据在传输过程中存在被窃听或篡改的风险。场景一跨机房/跨云校验源端和目标端分别部署在不同云平台校验流量经过公网传输。如果没有 SSL 加密数据包可以被中间节点抓取和分析。场景二安全合规要求金融、医疗、政务等行业对数据传输有严格的加密要求。数据库审计系统可能要求所有数据库连接必须使用加密通道即使是只读查询也不例外。场景三共享网络环境在 Kubernetes 集群或共享 VPC 中不同租户的流量可能共享物理网络。虽然有网络隔离但深度防御Defense in Depth原则要求在传输层也做加密保护。场景四修复 SQL 中的敏感数据repairDB 执行的修复 SQL 可能包含用户个人信息、交易记录等敏感数据。这些 SQL 文本通过明文连接传输时等同于将敏感数据直接暴露在网络上。2.2 五种 SSL 模式从只加密到全面验证gt-checksum 提供了五种 SSL 模式覆盖从最低安全要求到最高安全级别的全部场景DISABLED——明确禁用srcSslModeDISABLED显式禁用 SSL。适用于已经在网络层面做了加密如 VPN、专线或者在完全可信的内网环境中使用。PREFERRED——自适应模式默认值srcSslModePREFERRED优先尝试 SSL 连接如果服务端不支持则回退到非加密连接。这是设置了其他 SSL 参数但未显式指定 mode 时的默认值。适用于过渡期场景——源端和目标端可能部分启用了 SSL。REQUIRED——强制加密srcSslModeREQUIRED强制使用 SSL 加密但不验证服务端证书。这意味着传输数据是加密的但客户端不会检查服务端证书是否由可信 CA 签发。适用于内部环境需要加密但不担心中间人攻击的场景。VERIFY_CA——验证证书链srcSslCa/path/to/ca.pemsrcSslModeVERIFY_CA验证服务端证书是否由指定的 CA 签发。需要提供 CA 证书文件srcSslCa 或 dstSslCa。这是生产环境推荐的最低安全级别。VERIFY_IDENTITY——全面验证srcSslCa/path/to/ca.pemsrcSslModeVERIFY_IDENTITY在验证 CA 证书链的基础上还验证服务端身份主机名匹配。这是最高安全级别能有效防御中间人攻击。使用此模式时服务端证书的 CN 或 SAN 必须与 DSN 中的主机名一致。2.3 客户端证书认证除了验证服务端身份gt-checksum 还支持双向 TLS 认证mTLS——客户端也向服务端出示证书。适用于数据库配置了 REQUIRE X509 或 REQUIRE SUBJECT 的场景。; 源端 mTLS 配置srcSslCa/path/to/ca.pemsrcSslCert/path/to/client-cert.pemsrcSslKey/path/to/client-key.pemsrcSslModeVERIFY_CA同时验证所有证书文件必须存在且可读否则启动时报错退出避免运行时才发现证书缺失。2.4 源端和目标端独立配置gt-checksum 的一个关键设计是源端和目标端完全独立配置 SSL 参数。这意味着源端使用 VERIFY_CA目标端可以使用 REQUIRED源端和目标端可以使用不同的 CA 证书源端启用 SSL目标端可以不启用; 源端严格的证书验证srcSslCa/certs/source-ca.pemsrcSslCert/certs/source-client.pemsrcSslKey/certs/source-client-key.pemsrcSslModeVERIFY_CA; 目标端仅加密dstSslModeREQUIRED这种设计源于真实生产环境的需求——源端可能是外部公司提供的数据库使用他们的 CA目标端是内部数据库使用内部 CA 或暂未配置证书。2.5 SSL 参数激活条件SSL 配置并非无条件生效。gt-checksum 设计了明确的激活条件至少一个 SSL 参数非空srcSslCa、srcSslCert、srcSslKey、srcSslMode 中至少有一个不为空才激活源端 SSL 配置。目标端同理。驱动必须为 MySQLOracle 数据源不支持此配置。代码中通过 SrcDrive “mysql” 和 DestDrive “mysql” 进行判断。mode 未设置时默认 PREFERRED如果设置了其他 SSL 参数如 srcSslCa但未设置 srcSslMode默认使用 PREFERRED 模式。向后完全兼容未配置任何 SSL 参数时行为与 v3.x 完全一致DSN 不会被修改。三、功能使用演示3.1 最小配置仅要求加密不关心证书验证只希望数据传输加密srcDSNuser:ENC[…]tcp(10.0.0.1:3306)/db1dstDSNuser:ENC[…]tcp(10.0.0.2:3306)/db1; 两端都要求 SSL 加密不验证证书srcSslModeREQUIREDdstSslModeREQUIRED启动后gt-checksum 会在日志中输出 TLS 配置已应用DSN 中的密码会被脱敏$ gt-checksum -c gc.confInitializing gt-checksumReading configuration filesSource SSL: modeREQUIRED (encryption only, no certificate verification)Destination SSL: modeREQUIRED (encryption only, no certificate verification)…3.2 完整配置CA 证书验证生产环境推荐使用 VERIFY_CA 模式验证服务端证书srcDSNuser:ENC[…]tcp(10.0.0.1:3306)/db1dstDSNuser:ENC[…]tcp(10.0.0.2:3306)/db1; 源端 SSL完整证书验证srcSslCa/etc/ssl/certs/source-ca.pemsrcSslCert/etc/ssl/certs/source-client.pemsrcSslKey/etc/ssl/private/source-client-key.pemsrcSslModeVERIFY_CA; 目标端 SSL完整证书验证dstSslCa/etc/ssl/certs/dest-ca.pemdstSslCert/etc/ssl/certs/dest-client.pemdstSslKey/etc/ssl/private/dest-client-key.pemdstSslModeVERIFY_CA3.3 混合配置源端严格、目标端宽松源端是外部数据库需要严格验证目标端是内部数据库仅需加密srcDSNuser:ENC[…]tcp(ext-mysql.example.com:3306)/db1dstDSNuser:ENC[…]tcp(10.0.0.2:3306)/db1; 源端验证证书和主机名srcSslCa/etc/ssl/certs/external-ca.pemsrcSslModeVERIFY_IDENTITY; 目标端仅加密dstSslModeREQUIRED3.4 repairDB 配置repairDB 使用相同的配置文件只需配置 dstSsl* 系列参数dstDSNuser:ENC[…]tcp(10.0.0.2:3306)/db1fixFileDir./fixsql; 目标端 SSLdstSslCa/etc/ssl/certs/dest-ca.pemdstSslCert/etc/ssl/certs/dest-client.pemdstSslKey/etc/ssl/private/dest-client-key.pemdstSslModeVERIFY_CA$ repairDB -c gc.conf[REPAIR] Destination SSL: modeVERIFY_CA (CA certificate verification enabled)[REPAIR] Processing: fix-orders-001.sql … OK…3.5 启动报错示例证书文件不存在时gt-checksum 会在启动阶段立即报错退出$ gt-checksum -c gc.confgt-checksum: Source SSL configuration error: CA certificate file not found: /path/to/nonexistent-ca.pem客户端证书和密钥未配对时$ gt-checksum -c gc.confgt-checksum: Source SSL configuration error: both sslCert and sslKey must be provided together (got cert“/path/to/client.pem”, key“”)四、最佳实践及使用约束4.1 最佳实践生产环境建议使用 VERIFY_CA 或 VERIFY_IDENTITYREQUIRED 模式虽然加密了传输数据但不验证服务端证书存在中间人攻击风险。生产环境建议至少使用 VERIFY_CAsrcSslCa/etc/ssl/certs/ca.pemsrcSslModeVERIFY_CAdstSslCa/etc/ssl/certs/ca.pemdstSslModeVERIFY_CA2. 配合 DSN 密文保护使用SSL 加密了传输通道但配置文件中的 DSN 密码仍然需要保护。建议配合 ENC[…] 密文和 gt-dsn-crypt 工具一起使用srcDSNuser:ENC[…]tcp(10.0.0.1:3306)/db1dstDSNuser:ENC[…]tcp(10.0.0.2:3306)/db1srcSslModeVERIFY_CAdstSslModeVERIFY_CA3. 内网环境可使用 REQUIRED 作为最低要求如果校验任务完全在可信内网中运行且服务端证书管理尚未完善REQUIRED 模式可以作为过渡方案——至少保证传输数据不被明文窃取srcSslModeREQUIREDdstSslModeREQUIRED4. 证书文件权限管理CA 证书和客户端密钥文件应设置适当的文件权限避免未授权访问密钥文件仅 owner 可读chmod 600 /etc/ssl/private/client-key.pemCA 证书和客户端证书可被工具进程读取chmod 644 /etc/ssl/certs/ca.pemchmod 644 /etc/ssl/certs/client.pem6. 测试环境先验证再上线首次配置 SSL 时建议先在测试环境验证1. 确认证书文件可读ls -la /path/to/ca.pem /path/to/client-cert.pem /path/to/client-key.pem2. 使用 openssl 验证证书有效性openssl x509 -in /path/to/ca.pem -text -nooutopenssl verify -CAfile /path/to/ca.pem /path/to/client-cert.pem3. 启动 gt-checksum 观察日志gt-checksum -c gc.conf4.2 使用约束仅对 MySQL-family 数据源生效SSL 参数仅对 MySQL 数据源生效包括 MySQL、GreatSQL、Percona Server、MariaDB。Oracle 数据源不支持此配置设置 SSL 参数会被静默忽略。这是由于 Oracle 使用完全不同的 SSL 机制Oracle Net / TCPS不在本次实现范围内。VERIFY_CA / VERIFY_IDENTITY 必须提供 CA 证书使用 VERIFY_CA 或 VERIFY_IDENTITY 模式时必须提供对应端的 CA 证书文件srcSslCa 或 dstSslCa否则启动时报错。这是强制要求——没有 CA 证书就无法验证服务端证书链。客户端证书必须配对使用客户端证书认证时sslCert 和 sslKey 必须同时配置。只提供其中一个会在启动时报错。这是 TLS 协议的基本要求——证书和私钥必须匹配才能完成握手。所有证书文件必须存在且可读gt-checksum 在配置解析阶段就会验证所有证书文件的存在性和可读性。文件不存在或无读取权限时程序立即报错退出不会进入校验流程。这是一个 fail-fast 设计避免运行到一半才发现证书问题。SslMode 不区分大小写配置文件中的 srcSslMode 和 dstSslMode 值不区分大小写。verify_ca、VERIFY_CA、Verify_Ca 都是合法的。代码中会统一转为大写后进行匹配。DSN 中已有的 tls 参数会被替换如果 DSN 连接串中已经手动指定了 tls 参数gt-checksum 会用 SSL 配置生成的值替换它而非追加。这避免了 DSN 中出现两个 tls 参数导致驱动行为不确定的问题。五、总结gt-checksum v4.0.0 的 SSL 加密连接支持让数据校验和修复过程中的传输安全不再是空白。通过五种 SSL 模式覆盖从仅加密到全面验证的全部安全需求源端和目标端独立配置的设计则适应了异构环境下的真实生产场景。对生产环境的安全建议最低要求REQUIRED 模式保证传输加密推荐配置VERIFY_CA 模式验证服务端证书链最高安全VERIFY_IDENTITY 客户端证书双向认证 主机名验证完整方案SSL 加密传输 ENC[…] 密文保护密码 日志自动脱敏