Kafka Debezium上的JDBC for PostgreSQL-算法约束检查失败

fnatzsnv  于 2023-03-28  发布在  Apache
关注(0)|答案(1)|浏览(101)

我有一个docker容器镜像,其中包括Kafka Debezium(2.1)作为Source Connector,我还注入了JDBC for Postgres(42.5.1)作为Sink Connector,以便从单个pod/容器将记录从一些表传输到不同数据库中的其他表。
当源PostgreSQL和目标PostgreSQL是相同的版本(v11)时,除了传输数据没有任何问题外,一切都正常。
当源PostgreSQL是v11而目标PostgreSQL是v14时,Sink连接器中会出现错误,如下所示:

SSL error: Certificates do not conform to algorithm constraints
Algorithm constraints check failed on signature algorithm: SHA1withRSA

PostgreSQL在Azure上,v11是单服务器,v14是灵活服务器。经过一些调查,我发现(可能是相关的)v11的最小TLS为v1.0,而v14的最小TLS为v1.2。
所以,我尝试了几件事:
首先,要确保在PostgreSQL v14上启用TSL并将其设置为v1.2,并向Sink Connector中添加一些SSL参数,如下所示(相同的错误):

&ssl=true&sslfactory=org.postgresql.ssl.NonValidatingFactory&sslmode=require&sslProtocol=TLSv1.2

第二,确保在PostgreSQL v14上禁用TSL,并将Sink Connector设置为不使用SSL(相同的错误):

&ssl=false

不知道为什么我得到这个错误(即使在数据库和连接器上禁用SSL)。有什么我可以做的吗?

vxbzzdmp

vxbzzdmp1#

在GitHub上的KeyClock和Azure PostgreSQL Flexible Server中发现了类似的情况,其中发生了相同的错误。
类似问题的链接:https://github.com/keycloak/keycloak/issues/17320#issuecomment-1461573077

  • 看起来,Azure Database for Postgresql - Single Server,正在使用SHA 256 DigiCertGlobalRootG 2,对于任何使用Single Server的人来说都不会有这个问题。但是对于Flexible Server,仍然使用旧的SHA1根证书,导致此错误。*

基于oracle客户端的另一个类似的错误,似乎有一些java策略约束正在设置证书和tls的最低级别。
类似问题的链接:SSL handshake exception: "Algorithm constraints check failed: MD5withRSA"

  • 问题是由于Oracle禁用了不再被认为是安全的哈希算法而导致的。请查看JRE_HOME/lib/security/java.security它包含以下属性:jdk.certpath.disabledAlgorithms jdk.tls.disabledAlgorithms*

==============更新2023/03/24 =============
我在Confluent-Debezium中测试了上面的代码,更改了两个文件(第一个文件不是必需的,因为第二个文件会覆盖第一个文件)。根据Confluent-Debezium版本,java位置或版本可能会有所不同:

File1: etc/java/java-11-openjdk/java-11-openjdk-11.0.18.0.10-1.fc37.x86_64/conf/security/java.security
File2: /etc/crypto-policies/back-ends/java.config

更改了以下代码行(注解):

jdk.certpath.disabledAlgorithms
jdk.tls.disabledAlgorithms

对于Confluent-Debezium,有必要使用所需数据库的首选驱动程序制作自己的自定义映像(Dockerfile),并在其中放置一个包管理器,安装一个vim以具有灵活性并覆盖这些文件。

相关问题