Kafka Connect连接旧版SQL Server的SSL兼容问题求助
解决方案:兼容旧SQL Server与全SSL Kafka Connect
方案1:针对SQL Server JDBC连接单独配置JVM参数
无需修改系统全局加密策略,在Kafka Connect的启动参数中添加针对SQL Server JDBC驱动的专属配置,同时保留Kafka SSL连接所需的信任库配置:
在Connect的启动脚本或Docker环境变量中添加以下JVM参数:
export KAFKA_OPTS="-Djavax.net.ssl.trustStore=/path/to/your/kafka-truststore.jks \ -Djavax.net.ssl.trustStorePassword=your-truststore-password \ -Dcom.microsoft.sqlserver.jdbc.encrypt=false \ -Dcom.microsoft.sqlserver.jdbc.trustServerCertificate=false \ -Djdk.tls.legacyAlgorithms=SSLv3,TLSv1,TLSv1.1,3DES_EDE_CBC"
- 前两行参数保证Kafka Connect与Broker的SSL连接正常
- 中间两行直接指定SQL Server JDBC驱动的加密行为,可与URL参数形成双重保险
- 最后一行启用旧版TLS算法,适配旧SQL Server的加密要求,且仅影响JDBC连接的TLS逻辑,不干扰Kafka的SSL通信
方案2:自定义Docker镜像调整Java安全配置
通过修改Java的java.security文件,针对性启用旧加密算法,而非全局设置LEGACY策略:
示例Dockerfile(基于Confluent官方Kafka Connect镜像):
FROM confluentinc/cp-kafka-connect:7.4.0 # 根据Java版本调整配置文件路径,以下为Java 11示例 RUN sed -i 's/^jdk.tls.disabledAlgorithms=.*/jdk.tls.disabledAlgorithms=SSLv3, RC4, DES, MD5withRSA, DH keySize < 1024, EC keySize < 224, anon, NULL, include jdk.disabled.namedCurves/' /usr/lib/jvm/java-11-openjdk-amd64/conf/security/java.security RUN sed -i 's/^jdk.tls.legacyAlgorithms=.*/jdk.tls.legacyAlgorithms=TLSv1, TLSv1.1, 3DES_EDE_CBC/' /usr/lib/jvm/java-11-openjdk-amd64/conf/security/java.security
- 第一处修改移除了对TLSv1、TLSv1.1和3DES_EDE_CBC的禁用(旧SQL Server可能依赖这些算法)
- 第二处修改将上述旧算法加入legacy列表,允许Java在需要时使用它们
- 构建镜像后,启动Connect容器时正常配置Kafka SSL的信任库、密钥库参数即可
方案3:升级SQL Server JDBC驱动版本
使用最新版的Microsoft SQL Server JDBC驱动(mssql-jdbc),新版本驱动对旧SQL Server的兼容性优化更好,可能无需调整加密策略即可通过URL参数encrypt=false;trustServerCertificate=false建立连接:
- 将Connect的
plugin.path中替换为最新版驱动JAR包 - 保持原有Connector配置中的URL参数不变,测试连接是否正常
方案4:补充Connector连接属性配置
确认JdbcSourceConnector的连接属性是否已正确覆盖,可在配置中添加connection.properties参数补充设置:
"connection.properties": "encrypt=false;trustServerCertificate=false"
与URL中的参数配合,确保驱动能正确识别加密禁用指令
内容的提问来源于stack exchange,提问作者calderondev
相关产品推荐
相关产品推荐

