Flink 版本: 1.14

SSL 连接问题

javax.net.ssl.SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate)
    at sun.security.ssl.Handshaker.activate(Handshaker.java:529)
    at sun.security.ssl.SSLSocketImpl.kickstartHandshake(SSLSocketImpl.java:1492)
    at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1361)
    at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1413)
    at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1397)

产生问题的原因

因为 SSLv1-SSLv3 都有漏洞, JDK8 小版本号高的版本以及之后的 JDK 将他们都禁用了。

解决方法

有两种解决方法

方法一: 更改 JDK 参数解除禁用

在 JAVA_HOME/jre/lib/security/java.security 文件中找到 jdk.tls.disabledAlgorithns, 将 TLSv1 和 TLSv1.1 都添加上。

jdk.tls.disabledAlgorithms=SSLv3, TLSv1, TLSv1.1, RC4, DES, MD5withRSA, DH keySize < 1024, \
    EC keySize < 224, 3DES_EDE_CBC, anon, NULL, \
    include jdk.disabled.namedCurves

然后重启应用。

方法二: 在 JDBC 连接串中加入 useSSL=false

由于 cdc 还不支持配置参数所以自己进行了实现, 之后相应把这个 fix 推到社区的时候发现 2 分钟前有人 take 了这个 issue. 2 分钟啊...

github

对应的代码在这:[connector-mysql] Allow user to pass custom JDBC URL parameters used … by paul8263 · Pull Request #921 · ververica/flink-cdc-connectors

我们的实现基本上一样, 就是加一个 Properties 保存默认配置, 然后给用户提供配置可以添加 url 参数, 这些参数也放到这个 Properties 中, 然后通过字符串拼接生成 url.