Debezium连接SQL Server时RSA证书密钥长度报错问题咨询
Debezium连接SQL Server报RSA密钥长度错误的排查与解决
核心原因
你提到所有服务器都未启用连接加密,但仅部分实例报错,大概率是这些服务器的SQL Server或JDBC驱动默认触发了加密协商:
- 部分SQL Server实例可能配置了
FORCE_ENCRYPTION = OPTIONAL,此时若客户端未明确禁用加密,SQL Server会自动尝试发起加密连接,加载1024位证书时触发JDK的密钥长度限制。 - 正常与报错服务器的Debezium依赖的
mssql-jdbc版本可能存在差异,高版本驱动默认开启了加密协商逻辑。
验证步骤
- 检查报错服务器的SQL Server配置:执行
EXEC sp_configure 'force encryption',查看run_value是否为1(强制加密),或为0但存在其他触发加密的隐性配置。 - 对比正常与报错环境的
mssql-jdbc版本,确认是否存在版本差异。
解决方法
强制关闭连接加密
在Debezium连接器配置中添加encrypt=false参数,直接跳过加密协商,避免触发证书校验:connector.class=io.debezium.connector.sqlserver.SqlServerConnector database.hostname=你的数据库地址 database.port=1433 database.user=用户名 database.password=密码 database.dbname=数据库名 database.server.name=服务器标识名 encrypt=false # 新增该参数修正JDK安全策略(若需保留加密)
确保修改的是Debezium实际运行环境的java.security文件,找到以下配置并移除RSA keySize < 2048项:#jdk.tls.disabledAlgorithms=SSLv3, TLSv1, TLSv1.1, RC4, DES, MD5withRSA, \ # DH keySize < 1024, EC keySize < 224, 3DES_EDE_CBC, anon, NULL, \ # RSA keySize < 2048修改完成后重启Debezium服务;若Debezium运行在容器中,需确保修改的是容器内部的JDK配置文件。
升级证书(根治方案)
将1024位RSA证书替换为2048位及以上的证书,从根源上符合JDK安全规范,彻底解决此类问题。
为什么仅特定服务器报错?
不同SQL Server实例的配置、或Debezium依赖的驱动版本存在差异,部分实例触发了加密协商逻辑,部分未触发,这就导致了只有特定服务器出现密钥长度错误。
内容的提问来源于stack exchange,提问作者maxisam
相关产品推荐
相关产品推荐

