mirror of
https://github.com/alibaba/canal.git
synced 2026-11-04 00:30:15 +08:00
Feat, support SSL(TLS), improve SHA2 password. (#5147)
* feat #4489, mysql SSL * feat #4489, mysql SHA2 and SSL * merge master, fix conflict. * improve SHA2 auth plugin, fix SSL status print. * SSL key store, use url rather than path, keep same as JDBC driver.
This commit is contained in:
@@ -276,8 +276,7 @@ public class CanalInstanceWithManager extends AbstractCanalInstance {
|
||||
mysqlEventParser.setDestination(destination);
|
||||
// 编码参数
|
||||
mysqlEventParser.setConnectionCharset(parameters.getConnectionCharset());
|
||||
mysqlEventParser.setConnectionCharsetNumber(parameters.getConnectionCharsetNumber());
|
||||
// 网络相关参数
|
||||
// 网络相关参数1
|
||||
mysqlEventParser.setDefaultConnectionTimeoutInSeconds(parameters.getDefaultConnectionTimeoutInSeconds());
|
||||
mysqlEventParser.setSendBufferSize(parameters.getSendBufferSize());
|
||||
mysqlEventParser.setReceiveBufferSize(parameters.getReceiveBufferSize());
|
||||
@@ -291,13 +290,15 @@ public class CanalInstanceWithManager extends AbstractCanalInstance {
|
||||
mysqlEventParser.setMasterInfo(new AuthenticationInfo(dbAddresses.get(0),
|
||||
parameters.getDbUsername(),
|
||||
parameters.getDbPassword(),
|
||||
parameters.getDefaultDatabaseName()));
|
||||
parameters.getDefaultDatabaseName(),
|
||||
parameters.getSslInfo()));
|
||||
|
||||
if (dbAddresses.size() > 1) {
|
||||
mysqlEventParser.setStandbyInfo(new AuthenticationInfo(dbAddresses.get(1),
|
||||
parameters.getDbUsername(),
|
||||
parameters.getDbPassword(),
|
||||
parameters.getDefaultDatabaseName()));
|
||||
parameters.getDefaultDatabaseName(),
|
||||
parameters.getSslInfo()));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -369,7 +370,6 @@ public class CanalInstanceWithManager extends AbstractCanalInstance {
|
||||
localBinlogEventParser.setDestination(destination);
|
||||
localBinlogEventParser.setBufferSize(parameters.getReceiveBufferSize());
|
||||
localBinlogEventParser.setConnectionCharset(parameters.getConnectionCharset());
|
||||
localBinlogEventParser.setConnectionCharsetNumber(parameters.getConnectionCharsetNumber());
|
||||
localBinlogEventParser.setDirectory(parameters.getLocalBinlogDirectory());
|
||||
localBinlogEventParser.setProfilingEnabled(false);
|
||||
localBinlogEventParser.setDetectingEnable(parameters.getDetectingEnable());
|
||||
@@ -381,7 +381,8 @@ public class CanalInstanceWithManager extends AbstractCanalInstance {
|
||||
localBinlogEventParser.setMasterInfo(new AuthenticationInfo(dbAddresses.get(0),
|
||||
parameters.getDbUsername(),
|
||||
parameters.getDbPassword(),
|
||||
parameters.getDefaultDatabaseName()));
|
||||
parameters.getDefaultDatabaseName(),
|
||||
parameters.getSslInfo()));
|
||||
}
|
||||
|
||||
eventParser = localBinlogEventParser;
|
||||
|
||||
@@ -9,6 +9,8 @@ import org.apache.commons.lang.StringUtils;
|
||||
import org.apache.commons.lang.builder.ToStringBuilder;
|
||||
|
||||
import com.alibaba.otter.canal.common.utils.CanalToStringStyle;
|
||||
import com.alibaba.otter.canal.parse.driver.mysql.ssl.SslInfo;
|
||||
import com.alibaba.otter.canal.parse.driver.mysql.ssl.SslMode;
|
||||
|
||||
/**
|
||||
* canal运行相关参数
|
||||
@@ -56,8 +58,6 @@ public class CanalParameter implements Serializable {
|
||||
private Integer defaultConnectionTimeoutInSeconds = 30; // sotimeout
|
||||
private Integer receiveBufferSize = 64 * 1024;
|
||||
private Integer sendBufferSize = 64 * 1024;
|
||||
// 编码信息
|
||||
private Byte connectionCharsetNumber = (byte) 33;
|
||||
private String connectionCharset = "UTF-8";
|
||||
|
||||
// 数据库信息
|
||||
@@ -66,6 +66,15 @@ public class CanalParameter implements Serializable {
|
||||
private String dbUsername; // 数据库用户
|
||||
private String dbPassword; // 数据库密码
|
||||
|
||||
private String sslMode = SslMode.DISABLED.name();
|
||||
private String tlsVersions; // 和 enabledTLSProtocols 同含义,TLSv1.2,TLSv1.3
|
||||
private String trustCertificateKeyStoreType; // trustStore 证书类型,支持 JKS (默认) 和 PKCS12
|
||||
private String trustCertificateKeyStoreUrl; // trustStore 证书路径
|
||||
private String trustCertificateKeyStorePassword; // trustStore 证书密码
|
||||
private String clientCertificateKeyStoreType; // client 证书类型,支持 JKS (默认) 和 PKCS12
|
||||
private String clientCertificateKeyStoreUrl; // client 证书路径
|
||||
private String clientCertificateKeyStorePassword; // client 证书密码
|
||||
|
||||
// binlog链接信息
|
||||
private IndexMode indexMode;
|
||||
private List<String> positions; // 数据库positions信息
|
||||
@@ -108,10 +117,27 @@ public class CanalParameter implements Serializable {
|
||||
private InetSocketAddress masterAddress; // 主库信息
|
||||
private String masterUsername; // 帐号
|
||||
private String masterPassword; // 密码
|
||||
private String masterSslMode = SslMode.DISABLED.name();
|
||||
private String masterTlsVersions; // 和 enabledTLSProtocols 同含义,TLSv1.2,TLSv1.3
|
||||
private String masterTrustCertificateKeyStoreType; // trustStore 证书类型,支持 JKS (默认) 和 PKCS12
|
||||
private String masterTrustCertificateKeyStoreUrl; // trustStore 证书路径
|
||||
private String masterTrustCertificateKeyStorePassword; // trustStore 证书密码
|
||||
private String masterClientCertificateKeyStoreType; // client 证书类型,支持 JKS (默认) 和 PKCS12
|
||||
private String masterClientCertificateKeyStoreUrl; // client 证书路径
|
||||
private String masterClientCertificateKeyStorePassword; // client 证书密码
|
||||
|
||||
private InetSocketAddress standbyAddress; // 备库信息
|
||||
private String standbyUsername; // 帐号
|
||||
private String standbyPassword;
|
||||
private String standbySslMode = SslMode.DISABLED.name();
|
||||
private String standbyTlsVersions; // 和 enabledTLSProtocols 同含义,TLSv1.2,TLSv1.3
|
||||
private String standbyTrustCertificateKeyStoreType; // trustStore 证书类型,支持 JKS (默认) 和 PKCS12
|
||||
private String standbyTrustCertificateKeyStoreUrl; // trustStore 证书路径
|
||||
private String standbyTrustCertificateKeyStorePassword; // trustStore 证书密码
|
||||
private String standbyClientCertificateKeyStoreType; // client 证书类型,支持 JKS (默认) 和 PKCS12
|
||||
private String standbyClientCertificateKeyStoreUrl; // client 证书路径
|
||||
private String standbyClientCertificateKeyStorePassword; // client 证书密码
|
||||
|
||||
private String masterLogfileName = null; // master起始位置
|
||||
private Long masterLogfileOffest = null;
|
||||
private Long masterTimestamp = null;
|
||||
@@ -533,14 +559,6 @@ public class CanalParameter implements Serializable {
|
||||
this.sendBufferSize = sendBufferSize;
|
||||
}
|
||||
|
||||
public Byte getConnectionCharsetNumber() {
|
||||
return connectionCharsetNumber;
|
||||
}
|
||||
|
||||
public void setConnectionCharsetNumber(Byte connectionCharsetNumber) {
|
||||
this.connectionCharsetNumber = connectionCharsetNumber;
|
||||
}
|
||||
|
||||
public String getConnectionCharset() {
|
||||
return connectionCharset;
|
||||
}
|
||||
@@ -685,16 +703,16 @@ public class CanalParameter implements Serializable {
|
||||
groupDbAddresses.add(groupAddresses);
|
||||
}
|
||||
} else {
|
||||
if (masterAddress != null) {
|
||||
List<DataSourcing> groupAddresses = new ArrayList<>();
|
||||
if (masterAddress != null) {
|
||||
List<DataSourcing> groupAddresses = new ArrayList<>();
|
||||
groupAddresses.add(new DataSourcing(sourcingType, masterAddress));
|
||||
groupDbAddresses.add(groupAddresses);
|
||||
}
|
||||
groupDbAddresses.add(groupAddresses);
|
||||
}
|
||||
|
||||
if (standbyAddress != null) {
|
||||
List<DataSourcing> groupAddresses = new ArrayList<>();
|
||||
if (standbyAddress != null) {
|
||||
List<DataSourcing> groupAddresses = new ArrayList<>();
|
||||
groupAddresses.add(new DataSourcing(sourcingType, standbyAddress));
|
||||
groupDbAddresses.add(groupAddresses);
|
||||
groupDbAddresses.add(groupAddresses);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -731,6 +749,134 @@ public class CanalParameter implements Serializable {
|
||||
this.dbPassword = dbPassword;
|
||||
}
|
||||
|
||||
public SslInfo getSslInfo() {
|
||||
if (dbUsername == null) {
|
||||
if (masterUsername != null) {
|
||||
return new SslInfo(SslMode.valueOf(masterSslMode),
|
||||
masterTlsVersions,
|
||||
masterTrustCertificateKeyStoreType,
|
||||
masterTrustCertificateKeyStoreUrl,
|
||||
masterTrustCertificateKeyStorePassword,
|
||||
masterClientCertificateKeyStoreType,
|
||||
masterClientCertificateKeyStoreUrl,
|
||||
masterClientCertificateKeyStorePassword);
|
||||
} else {
|
||||
return new SslInfo(SslMode.valueOf(standbySslMode),
|
||||
standbyTlsVersions,
|
||||
standbyTrustCertificateKeyStoreType,
|
||||
standbyTrustCertificateKeyStoreUrl,
|
||||
standbyTrustCertificateKeyStorePassword,
|
||||
standbyClientCertificateKeyStoreType,
|
||||
standbyClientCertificateKeyStoreUrl,
|
||||
standbyClientCertificateKeyStorePassword);
|
||||
}
|
||||
}
|
||||
return new SslInfo(SslMode.valueOf(sslMode),
|
||||
tlsVersions,
|
||||
trustCertificateKeyStoreType,
|
||||
trustCertificateKeyStoreUrl,
|
||||
trustCertificateKeyStorePassword,
|
||||
clientCertificateKeyStoreType,
|
||||
clientCertificateKeyStoreUrl,
|
||||
clientCertificateKeyStorePassword);
|
||||
}
|
||||
|
||||
public void setSslMode(String sslMode) {
|
||||
this.sslMode = sslMode;
|
||||
}
|
||||
|
||||
public void setTlsVersions(String tlsVersions) {
|
||||
this.tlsVersions = tlsVersions;
|
||||
}
|
||||
|
||||
public void setTrustCertificateKeyStoreType(String trustCertificateKeyStoreType) {
|
||||
this.trustCertificateKeyStoreType = trustCertificateKeyStoreType;
|
||||
}
|
||||
|
||||
public void setTrustCertificateKeyStoreUrl(String trustCertificateKeyStoreUrl) {
|
||||
this.trustCertificateKeyStoreUrl = trustCertificateKeyStoreUrl;
|
||||
}
|
||||
|
||||
public void setTrustCertificateKeyStorePassword(String trustCertificateKeyStorePassword) {
|
||||
this.trustCertificateKeyStorePassword = trustCertificateKeyStorePassword;
|
||||
}
|
||||
|
||||
public void setClientCertificateKeyStoreType(String clientCertificateKeyStoreType) {
|
||||
this.clientCertificateKeyStoreType = clientCertificateKeyStoreType;
|
||||
}
|
||||
|
||||
public void setClientCertificateKeyStoreUrl(String clientCertificateKeyStoreUrl) {
|
||||
this.clientCertificateKeyStoreUrl = clientCertificateKeyStoreUrl;
|
||||
}
|
||||
|
||||
public void setClientCertificateKeyStorePassword(String clientCertificateKeyStorePassword) {
|
||||
this.clientCertificateKeyStorePassword = clientCertificateKeyStorePassword;
|
||||
}
|
||||
|
||||
public void setMasterSslMode(String masterSslMode) {
|
||||
this.masterSslMode = masterSslMode;
|
||||
}
|
||||
|
||||
public void setMasterTlsVersions(String masterTlsVersions) {
|
||||
this.masterTlsVersions = masterTlsVersions;
|
||||
}
|
||||
|
||||
public void setMasterTrustCertificateKeyStoreType(String masterTrustCertificateKeyStoreType) {
|
||||
this.masterTrustCertificateKeyStoreType = masterTrustCertificateKeyStoreType;
|
||||
}
|
||||
|
||||
public void setMasterTrustCertificateKeyStoreUrl(String masterTrustCertificateKeyStoreUrl) {
|
||||
this.masterTrustCertificateKeyStoreUrl = masterTrustCertificateKeyStoreUrl;
|
||||
}
|
||||
|
||||
public void setMasterTrustCertificateKeyStorePassword(String masterTrustCertificateKeyStorePassword) {
|
||||
this.masterTrustCertificateKeyStorePassword = masterTrustCertificateKeyStorePassword;
|
||||
}
|
||||
|
||||
public void setMasterClientCertificateKeyStoreType(String masterClientCertificateKeyStoreType) {
|
||||
this.masterClientCertificateKeyStoreType = masterClientCertificateKeyStoreType;
|
||||
}
|
||||
|
||||
public void setMasterClientCertificateKeyStoreUrl(String masterClientCertificateKeyStoreUrl) {
|
||||
this.masterClientCertificateKeyStoreUrl = masterClientCertificateKeyStoreUrl;
|
||||
}
|
||||
|
||||
public void setMasterClientCertificateKeyStorePassword(String masterClientCertificateKeyStorePassword) {
|
||||
this.masterClientCertificateKeyStorePassword = masterClientCertificateKeyStorePassword;
|
||||
}
|
||||
|
||||
public void setStandbySslMode(String standbySslMode) {
|
||||
this.standbySslMode = standbySslMode;
|
||||
}
|
||||
|
||||
public void setStandbyTlsVersions(String standbyTlsVersions) {
|
||||
this.standbyTlsVersions = standbyTlsVersions;
|
||||
}
|
||||
|
||||
public void setStandbyTrustCertificateKeyStoreType(String standbyTrustCertificateKeyStoreType) {
|
||||
this.standbyTrustCertificateKeyStoreType = standbyTrustCertificateKeyStoreType;
|
||||
}
|
||||
|
||||
public void setStandbyTrustCertificateKeyStoreUrl(String standbyTrustCertificateKeyStoreUrl) {
|
||||
this.standbyTrustCertificateKeyStoreUrl = standbyTrustCertificateKeyStoreUrl;
|
||||
}
|
||||
|
||||
public void setStandbyTrustCertificateKeyStorePassword(String standbyTrustCertificateKeyStorePassword) {
|
||||
this.standbyTrustCertificateKeyStorePassword = standbyTrustCertificateKeyStorePassword;
|
||||
}
|
||||
|
||||
public void setStandbyClientCertificateKeyStoreType(String standbyClientCertificateKeyStoreType) {
|
||||
this.standbyClientCertificateKeyStoreType = standbyClientCertificateKeyStoreType;
|
||||
}
|
||||
|
||||
public void setStandbyClientCertificateKeyStoreUrl(String standbyClientCertificateKeyStoreUrl) {
|
||||
this.standbyClientCertificateKeyStoreUrl = standbyClientCertificateKeyStoreUrl;
|
||||
}
|
||||
|
||||
public void setStandbyClientCertificateKeyStorePassword(String standbyClientCertificateKeyStorePassword) {
|
||||
this.standbyClientCertificateKeyStorePassword = standbyClientCertificateKeyStorePassword;
|
||||
}
|
||||
|
||||
public List<String> getPositions() {
|
||||
if (positions == null) {
|
||||
positions = new ArrayList<>();
|
||||
|
||||
@@ -114,7 +114,6 @@
|
||||
<property name="defaultConnectionTimeoutInSeconds" value="${canal.instance.network.soTimeout:30}" />
|
||||
|
||||
<!-- 解析编码 -->
|
||||
<!-- property name="connectionCharsetNumber" value="${canal.instance.connectionCharsetNumber:33}" /-->
|
||||
<property name="connectionCharset" value="${canal.instance.connectionCharset:UTF-8}" />
|
||||
|
||||
<!-- 解析位点记录 -->
|
||||
|
||||
@@ -100,7 +100,6 @@
|
||||
<property name="defaultConnectionTimeoutInSeconds" value="${canal.instance.network.soTimeout:30}" />
|
||||
|
||||
<!-- 解析编码 -->
|
||||
<!-- property name="connectionCharsetNumber" value="${canal.instance.connectionCharsetNumber:33}" /-->
|
||||
<property name="connectionCharset" value="${canal.instance.connectionCharset:UTF-8}" />
|
||||
|
||||
<!-- 解析位点记录 -->
|
||||
|
||||
@@ -106,7 +106,6 @@
|
||||
<property name="defaultConnectionTimeoutInSeconds" value="${canal.instance.network.soTimeout:30}" />
|
||||
|
||||
<!-- 解析编码 -->
|
||||
<!-- property name="connectionCharsetNumber" value="${canal.instance.connectionCharsetNumber:33}" /-->
|
||||
<property name="connectionCharset" value="${canal.instance.connectionCharset:UTF-8}" />
|
||||
|
||||
<!-- 解析位点记录 -->
|
||||
@@ -186,7 +185,6 @@
|
||||
<property name="defaultConnectionTimeoutInSeconds" value="${canal.instance.network.soTimeout:30}" />
|
||||
|
||||
<!-- 解析编码 -->
|
||||
<!-- property name="connectionCharsetNumber" value="${canal.instance.connectionCharsetNumber:33}" /-->
|
||||
<property name="connectionCharset" value="${canal.instance.connectionCharset:UTF-8}" />
|
||||
|
||||
<!-- 解析位点记录 -->
|
||||
|
||||
@@ -97,7 +97,6 @@
|
||||
<property name="defaultConnectionTimeoutInSeconds" value="${canal.instance.network.soTimeout:30}" />
|
||||
|
||||
<!-- 解析编码 -->
|
||||
<!-- property name="connectionCharsetNumber" value="${canal.instance.connectionCharsetNumber:33}" /-->
|
||||
<property name="connectionCharset" value="${canal.instance.connectionCharset:UTF-8}" />
|
||||
|
||||
<!-- 解析位点记录 -->
|
||||
|
||||
Reference in New Issue
Block a user