开发者社区 > 大数据与机器学习 > 实时计算 Flink > 正文

Flink CDC里 cdc端应该如何加参数可以忽略这个错误?

Flink CDC里The driver could not establish a secure connection to SQL Server by using Secure Sockets Layer (SSL) encryption. Error: "The server selected protocol version TLS10 is not accepted by client preferences [TLS13, TLS12]". sqlserver版本太低 不支持 tls1.2 1.3 cdc端应该如何加参数可以忽略这个错误?

展开
收起
小小鹿鹿鹿 2024-01-18 07:45:01 207 0
5 条回答
写回答
取消 提交回答
  • 其他的回答都试过,没什么用。
    根本的原因是taskmanager和sqlserver在进行ssl连接时,两边的协议版本不一致导致,两个地方需要检查,第一是客户端使用的tls算法,第二是客户端使用的驱动版本(如果sqlserver版本低、驱动版本过高flinkcdc也会报这个错)。

    驱动版本过高DataGrip连接报错信息:
    image.png
    如果是驱动版本问题,那就需要重置制作flink镜像,把高版本的驱动替换为合适的低版本驱动。

    1、修改taskmanager的java.security文件,使其支持低版本的tls算法,具体路径为:
    java8:{jre-path}/lib/security/java.security,
    java11+:{jre-path}/conf/security/java.security
    找到jdk.tls.disabledAlgorithms配置项,删除TLSv1和TLSv1.1:
    image.png

    如果部署采用的是flink on k8s,此种方式需要修改镜像,可使用第二种方式。

    2、taskmanager启动时动态指定:
    -Djdk.tls.disabledAlgorithms=xxxx,
    可以在flink-conf.yaml中使用如下方式动态指定:
    env.java.opts.taskmanager: "-Djdk.tls.disabledAlgorithms=SSLv3, RC4, DES, MD5withRSA, DH keySize < 1024, EC keySize < 224, 3DES_EDE_CBC, anon, NULL, include jdk.disabled.namedCurves"

    我使用的dinky为0.7.3,flink为1.17.1,jre为11。

    注意1:在实际的操作过程中发现如果只指定
    env.java.opts.taskmanager: "-Djdk.tls.disabledAlgorithms=xxx",
    系统变量传递不到taskmanager的java进程中,而下面这种方式却可以正常传递:
    env.java.opts.taskmanager: "-Duser.timezone=GMT+8 -Djdk.tls.disabledAlgorithms=xxx",
    有些令人费解、未作深究。

    注意2:jdk.tls.disabledAlgorithms指定的内容要基于taskmanager使用的jre进行修改,否则可能会出现一些稀奇古怪的问题。

    2024-10-10 09:38:14
    赞同 展开评论 打赏
  • 面对过去,不要迷离;面对未来,不必彷徨;活在今天,你只要把自己完全展示给别人看。

    在Flink CDC中,如果SQL Server版本太低不支持TLS 1.2或1.3,可以尝试通过添加JVM参数来忽略这个错误。具体操作如下:

    1. 打开Flink CDC的配置文件(例如:flink-conf.yaml)。

    2. 在配置文件中添加以下JVM参数:

    taskmanager.network.netty.tcp.allowed-protocols: TLSv1,TLSv1.1,TLSv1.2,TLSv1.3
    

    这将允许Flink CDC使用TLS 1.0、1.1、1.2和1.3协议进行连接。请注意,这可能会导致安全风险,因为较旧的TLS协议可能不够安全。因此,建议尽量升级SQL Server的版本以支持更高版本的TLS协议。

    2024-01-19 14:47:57
    赞同 展开评论 打赏
  • 要解决这个问题,您可以尝试在Flink CDC的配置文件中添加以下参数来忽略TLS 1.2和TLS 1.3协议版本:

    sqlserver:
      connector:
        type: sqlserver-cdc
        username: your_username
        password: your_password
        server-name: your_server_name
        database-name: your_database_name
        port: your_port
        ssl:
          enabled: true
          cacert: /path/to/your/cacert.pem
          client-key: /path/to/your/client-key.pem
          client-cert: /path/to/your/client-cert.pem
          protocol-versions: TLSv1,TLSv1.1
    

    在这个例子中,我们将protocol-versions设置为TLSv1TLSv1.1,这将允许客户端接受TLS 1.0和TLS 1.1协议版本。请注意,这可能会导致安全问题,因为较旧的协议版本可能不安全。因此,建议您尽可能使用最新的TLS协议版本。

    2024-01-19 09:02:06
    赞同 展开评论 打赏
  • 参考
    https://github.com/ververica/flink-cdc-connectors/issues/2991
    。此回答来自钉群Flink CDC 社区。

    2024-01-18 11:03:50
    赞同 展开评论 打赏
  • 网站:http://ixiancheng.cn/ 微信订阅号:小马哥学JAVA

    通过报错的日志分析的原因:
    Flink CDC(Change Data Capture)无法与 SQL Server 建立安全的 SSL 连接,因为 SQL Server 使用的是较低版本的 TLS(传输层安全协议),而 Flink CDC 客户端的偏好是使用 TLS1.2 或 TLS1.3。

    解决方案:
    您可以在 Flink CDC 客户端的配置中添加参数来忽略这个错误。但是,请注意,这将降低连接的安全性,因为您将绕过 SSL/TLS 的检查。以下是一个示例参数,可以在 Flink CDC 的连接配置中添加:

    java
    .option("ssl-handshake-mode", "legacy")
    这将会使 Flink CDC 客户端使用旧版的 SSL 握手模式,以兼容较低版本的 TLS。

    请注意,使用旧版握手模式可能会带来安全风险,因为它可能使您的应用程序容易受到某些已知的 SSL/TLS 攻击的影响。因此,如果可能的话,最好的解决方案是升级 SQL Server 到支持 TLS1.2 或 TLS1.3 的版本。

    希望能够帮助到你

    2024-01-18 10:42:05
    赞同 1 展开评论 打赏

实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。

相关产品

  • 实时计算 Flink版
  • 相关电子书

    更多
    Flink CDC Meetup PPT - 龚中强 立即下载
    Flink CDC Meetup PPT - 王赫 立即下载
    Flink CDC Meetup PPT - 覃立辉 立即下载