【问题标题】:How to set encrypt false in Camel Debezium SQL server connector for JDBC connection如何在 Camel Debezium SQL 服务器连接器中为 JDBC 连接设置加密 false
【发布时间】:2022-08-22 23:50:11
【问题描述】:

我在尝试使用 Camel Debezium SQL 服务器连接器时遇到问题。我正在尝试使用 Camel Debezium SQL 服务器连接器捕获 SQL 服务器数据库表中的数据更改并将它们发送到消息代理。我知道 JDBC SQL 服务器连接可以选择使加密为 false 以防止出现此问题。但是我在 Camel Debezium SQL 服务器连接器中找不到类似的方法。

要使用 Camel Debezium SQL 服务器连接器,我正在关注此文档:

https://camel.apache.org/components/3.18.x/debezium-sqlserver-component.html#_samples

当我运行该应用程序时,它向我显示以下错误:

错误 io.debezium.embedded.EmbeddedEngine - 尝试运行连接器类 \'io.debezium.connector.sqlserver.SqlServerConnector\' 时出错

原因:com.microsoft.sqlserver.jdbc.SQLServerException:驱动程序无法使用安全套接字层 (SSL) 加密建立与 SQL Server 的安全连接。错误:\“PKIX 路径构建失败:sun.security.provider.certpath.SunCertPathBuilderException:无法找到到所请求目标的有效证书路径\”。

我的POM如下:

<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>org.apache.camel</groupId>
      <artifactId>camel-parent</artifactId>
      <version>3.18.1-SNAPSHOT</version>
      <scope>import</scope>
      <type>pom</type>
    </dependency>
  </dependencies>
</dependencyManagement>
<dependencies>
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
  </dependency>
  <dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-core</artifactId>
  </dependency>
  <dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-main</artifactId>
  </dependency>
  <dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-debezium-sqlserver</artifactId>
  </dependency>
  <dependency>
    <groupId>com.microsoft.sqlserver</groupId>
    <artifactId>mssql-jdbc</artifactId>
    <version>11.2.0.jre11</version>
  </dependency>
  <dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-jackson</artifactId>
  </dependency>
  <dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-kafka</artifactId>
  </dependency>
</dependencies>

我在用:
弹簧启动:2.7.2
SQL Server:docker 镜像:mcr.microsoft.com/mssql/server:2022-latest
卡夫卡图像:confluentinc/cp-zookeeper:最新

谁能帮我解决这个问题?

    标签: java sql-server spring-boot apache-kafka apache-camel


    【解决方案1】:
    <dependency>
      <groupId>com.microsoft.sqlserver</groupId>
      <artifactId>mssql-jdbc</artifactId>
      <version>9.2.1.jre11</version>
    </dependency>
    

    最后,我能够通过将 mssql-jdbc 驱动程序降级到上述驱动程序来解决该问题。

    【讨论】:

      【解决方案2】:

      在处理 Debezium 连接器时,要注册一个新的 SQL Server 连接器,我们通常可以 POST 一个 JSON 配置,如下所示:

      curl -H "Content-Type: application/json" -XPOST http://127.0.0.1:8083/connectors --data @- << EOF
      {
          "name": "local-hub-connector",
          "config": {
              "connector.class": "io.debezium.connector.sqlserver.SqlServerConnector",
              "database.hostname": "mssql-2019",
              "database.port": 1433,
              "database.user": "Debezium",
              "database.password": "StrongPassw0rd",
              "database.dbname": "DebeziumTest",
              "database.server.name": "DebeziumTestServer",
              "table.include.list": "dbo.tb_CDCTab1",
              "database.history.kafka.bootstrap.servers": "broker:29092",
              "database.history.kafka.topic": "dbhistory.DebeziumTestServer"
          }
      }
      EOF
      

      当连接器使用 10.2 之前的 JDBC 版本时,这可以正常工作,但 JDBC Driver 10.2 for SQL Server 引入了重大更改,特别是:

      BREAKING CHANGE - 默认加密为真

      这通常是有问题的,因为默认情况下,SQL Server 使用自签名 X.509 证书安装,因此它不会出现在任何信任存储中。

      如果您使用的是安装了 JDBC Driver 10.2 for SQL Server(或更高版本)的新连接器容器,则需要修改连接器配置:

      • 不是需要加密吗?在连接字符串选项中使用encrypt=false 将其关闭。
      • 您需要加密吗?将trustServerCertificate=true 添加到连接字符串选项中。

      我们可以通过传递配置属性来做到这一点,即:Debezium SQL Server connector pass-through database driver configuration properties

      Debezium 连接器提供数据库驱动程序的直通配置。直通数据库属性以前缀 database.* 开头。例如,连接器将诸如 database.foobar=false 之类的属性传递给 JDBC URL。

      要关闭加密,我们将发布以下 JSON 配置:

      curl -H "Content-Type: application/json" -XPOST http://127.0.0.1:8083/connectors --data @- << EOF
      {
          "name": "local-hub-connector",
          "config": {
              "connector.class": "io.debezium.connector.sqlserver.SqlServerConnector",
              "database.hostname": "mssql-2019",
              "database.port": 1433,
              "database.user": "Debezium",
              "database.password": "StrongPassw0rd",
              "database.dbname": "DebeziumTest",
              "database.server.name": "DebeziumTestServer",
              "table.include.list": "dbo.tb_CDCTab1",
              "database.history.kafka.bootstrap.servers": "broker:29092",
              "database.history.kafka.topic": "dbhistory.DebeziumTestServer",
              "database.encrypt": false
          }
      }
      EOF
      

      为了保持加密和信任 SQL Server 的自签名证书,我们将改为发布以下 JSON 配置:

      curl -H "Content-Type: application/json" -XPOST http://127.0.0.1:8083/connectors --data @- << EOF
      {
          "name": "local-hub-connector",
          "config": {
              "connector.class": "io.debezium.connector.sqlserver.SqlServerConnector",
              "database.hostname": "mssql-2019",
              "database.port": 1433,
              "database.user": "Debezium",
              "database.password": "StrongPassw0rd",
              "database.dbname": "DebeziumTest",
              "database.server.name": "DebeziumTestServer",
              "table.include.list": "dbo.tb_CDCTab1",
              "database.history.kafka.bootstrap.servers": "broker:29092",
              "database.history.kafka.topic": "dbhistory.DebeziumTestServer",
              "database.encrypt": true,
              "database.trustServerCertificate": true
          }
      }
      EOF
      

      如果您无法发布配置更改,那么camel.component.debezium-sqlserver.additional-properties 可能会提供类似的功能。

      【讨论】:

      • 谢谢你的建议。在使用 Apache Camel Debezium 连接器时,我找不到发布 curl 请求的规定。所以无法使用这些选项。然后是您建议的最后一个选项,camel.component.debezium-sqlserver.additional-properties,我可以看到没有可用的属性来设置 database.encrypt 和 database.trustServerCertificate,因此我也无法使用该选项。
      • 上面的配置更改在 Confluent 平台上运行良好。抱歉,我通常不使用 Apache Camel 版本的 Debezium。
      猜你喜欢
      • 1970-01-01
      • 2016-04-28
      • 1970-01-01
      • 2020-04-20
      • 2019-10-18
      • 1970-01-01
      • 2016-06-15
      • 2021-01-25
      • 1970-01-01
      相关资源
      最近更新 更多