我有一个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)。有什么我可以做的吗?
1条答案
按热度按时间vxbzzdmp1#
在GitHub上的KeyClock和Azure PostgreSQL Flexible Server中发现了类似的情况,其中发生了相同的错误。
类似问题的链接:https://github.com/keycloak/keycloak/issues/17320#issuecomment-1461573077
基于oracle客户端的另一个类似的错误,似乎有一些java策略约束正在设置证书和tls的最低级别。
类似问题的链接:SSL handshake exception: "Algorithm constraints check failed: MD5withRSA"
==============更新2023/03/24 =============
我在Confluent-Debezium中测试了上面的代码,更改了两个文件(第一个文件不是必需的,因为第二个文件会覆盖第一个文件)。根据Confluent-Debezium版本,java位置或版本可能会有所不同:
更改了以下代码行(注解):
对于Confluent-Debezium,有必要使用所需数据库的首选驱动程序制作自己的自定义映像(Dockerfile),并在其中放置一个包管理器,安装一个vim以具有灵活性并覆盖这些文件。