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:
@@ -33,7 +33,6 @@ public abstract class AbstractMysqlEventParser extends AbstractEventParser {
|
||||
protected TableMetaTSDB tableMetaTSDB;
|
||||
|
||||
// 编码信息
|
||||
protected byte connectionCharsetNumber = (byte) 33;
|
||||
protected Charset connectionCharset = Charset.forName("UTF-8");
|
||||
protected boolean filterQueryDcl = false;
|
||||
protected boolean filterQueryDml = false;
|
||||
@@ -205,10 +204,6 @@ public abstract class AbstractMysqlEventParser extends AbstractEventParser {
|
||||
|
||||
// ============================ setter / getter =========================
|
||||
|
||||
public void setConnectionCharsetNumber(byte connectionCharsetNumber) {
|
||||
this.connectionCharsetNumber = connectionCharsetNumber;
|
||||
}
|
||||
|
||||
public void setConnectionCharsetStd(Charset connectionCharset) {
|
||||
this.connectionCharset = connectionCharset;
|
||||
}
|
||||
|
||||
@@ -116,7 +116,6 @@ public class LocalBinlogEventParser extends AbstractMysqlEventParser implements
|
||||
MysqlConnection connection = new MysqlConnection(runningInfo.getAddress(),
|
||||
runningInfo.getUsername(),
|
||||
runningInfo.getPassword(),
|
||||
connectionCharsetNumber,
|
||||
runningInfo.getDefaultDatabaseName());
|
||||
connection.getConnector().setReceiveBufferSize(64 * 1024);
|
||||
connection.getConnector().setSendBufferSize(64 * 1024);
|
||||
|
||||
@@ -27,6 +27,7 @@ import com.alibaba.otter.canal.parse.driver.mysql.packets.client.RegisterSlaveCo
|
||||
import com.alibaba.otter.canal.parse.driver.mysql.packets.client.SemiAckCommandPacket;
|
||||
import com.alibaba.otter.canal.parse.driver.mysql.packets.server.ErrorPacket;
|
||||
import com.alibaba.otter.canal.parse.driver.mysql.packets.server.ResultSetPacket;
|
||||
import com.alibaba.otter.canal.parse.driver.mysql.ssl.SslInfo;
|
||||
import com.alibaba.otter.canal.parse.driver.mysql.utils.PacketManager;
|
||||
import com.alibaba.otter.canal.parse.exception.CanalParseException;
|
||||
import com.alibaba.otter.canal.parse.inbound.ErosaConnection;
|
||||
@@ -73,14 +74,28 @@ public class MysqlConnection implements ErosaConnection {
|
||||
connector.setConnTimeout(connTimeout);
|
||||
}
|
||||
|
||||
public MysqlConnection(InetSocketAddress address, String username, String password, byte charsetNumber,
|
||||
String defaultSchema){
|
||||
public MysqlConnection(InetSocketAddress address, String username, String password,
|
||||
String defaultSchema){
|
||||
authInfo = new AuthenticationInfo();
|
||||
authInfo.setAddress(address);
|
||||
authInfo.setUsername(username);
|
||||
authInfo.setPassword(password);
|
||||
authInfo.setDefaultDatabaseName(defaultSchema);
|
||||
connector = new MysqlConnector(address, username, password, charsetNumber, defaultSchema);
|
||||
connector = new MysqlConnector(address, username, password, defaultSchema);
|
||||
// 将connection里面的参数透传下
|
||||
connector.setSoTimeout(soTimeout);
|
||||
connector.setConnTimeout(connTimeout);
|
||||
}
|
||||
|
||||
public MysqlConnection(InetSocketAddress address, String username, String password,
|
||||
String defaultSchema, SslInfo sslInfo){
|
||||
authInfo = new AuthenticationInfo();
|
||||
authInfo.setAddress(address);
|
||||
authInfo.setUsername(username);
|
||||
authInfo.setPassword(password);
|
||||
authInfo.setDefaultDatabaseName(defaultSchema);
|
||||
authInfo.setSslInfo(sslInfo);
|
||||
connector = new MysqlConnector(address, username, password, defaultSchema, sslInfo);
|
||||
// 将connection里面的参数透传下
|
||||
connector.setSoTimeout(soTimeout);
|
||||
connector.setConnTimeout(connTimeout);
|
||||
|
||||
@@ -305,8 +305,8 @@ public class MysqlEventParser extends AbstractMysqlEventParser implements CanalE
|
||||
MysqlConnection connection = new MysqlConnection(runningInfo.getAddress(),
|
||||
runningInfo.getUsername(),
|
||||
runningInfo.getPassword(),
|
||||
connectionCharsetNumber,
|
||||
runningInfo.getDefaultDatabaseName());
|
||||
runningInfo.getDefaultDatabaseName(),
|
||||
runningInfo.getSslInfo());
|
||||
connection.getConnector().setReceiveBufferSize(receiveBufferSize);
|
||||
connection.getConnector().setSendBufferSize(sendBufferSize);
|
||||
connection.getConnector().setSoTimeout(defaultConnectionTimeoutInSeconds * 1000);
|
||||
|
||||
@@ -51,7 +51,6 @@ public class RdsBinlogEventParserProxy extends MysqlEventParser {
|
||||
rdsLocalBinlogEventParser.setDestination(destination);
|
||||
rdsLocalBinlogEventParser.setAlarmHandler(this.getAlarmHandler());
|
||||
rdsLocalBinlogEventParser.setConnectionCharsetStd(this.connectionCharset);
|
||||
rdsLocalBinlogEventParser.setConnectionCharsetNumber(this.connectionCharsetNumber);
|
||||
rdsLocalBinlogEventParser.setEnableTsdb(this.enableTsdb);
|
||||
rdsLocalBinlogEventParser.setEventBlackFilter(this.eventBlackFilter);
|
||||
rdsLocalBinlogEventParser.setFilterQueryDcl(this.filterQueryDcl);
|
||||
|
||||
@@ -3,6 +3,8 @@ package com.alibaba.otter.canal.parse.support;
|
||||
import java.net.InetSocketAddress;
|
||||
|
||||
import com.alibaba.otter.canal.common.utils.CommonUtils;
|
||||
import com.alibaba.otter.canal.parse.driver.mysql.ssl.SslInfo;
|
||||
|
||||
import org.apache.commons.lang.builder.ToStringBuilder;
|
||||
import org.apache.commons.lang.builder.ToStringStyle;
|
||||
|
||||
@@ -22,6 +24,7 @@ public class AuthenticationInfo {
|
||||
private String defaultDatabaseName;// 默认链接的数据库
|
||||
private String pwdPublicKey; //公钥
|
||||
private boolean enableDruid; //是否使用druid加密解密数据库密码
|
||||
private SslInfo sslInfo;
|
||||
|
||||
public void initPwd() throws Exception{
|
||||
if (enableDruid) {
|
||||
@@ -37,13 +40,19 @@ public class AuthenticationInfo {
|
||||
this(address, username, password, "");
|
||||
}
|
||||
|
||||
public AuthenticationInfo(InetSocketAddress address, String username, String password, String defaultDatabaseName){
|
||||
private AuthenticationInfo(InetSocketAddress address, String username, String password, String defaultDatabaseName){
|
||||
this.address = address;
|
||||
this.username = username;
|
||||
this.password = password;
|
||||
this.defaultDatabaseName = defaultDatabaseName;
|
||||
}
|
||||
|
||||
public AuthenticationInfo(InetSocketAddress address, String username, String password,
|
||||
String defaultDatabaseName, SslInfo sslInfo) {
|
||||
this(address, username, password, defaultDatabaseName);
|
||||
this.sslInfo = sslInfo;
|
||||
}
|
||||
|
||||
public InetSocketAddress getAddress() {
|
||||
return address;
|
||||
}
|
||||
@@ -92,6 +101,14 @@ public class AuthenticationInfo {
|
||||
this.enableDruid = enableDruid;
|
||||
}
|
||||
|
||||
public SslInfo getSslInfo() {
|
||||
return sslInfo;
|
||||
}
|
||||
|
||||
public void setSslInfo(SslInfo sslInfo) {
|
||||
this.sslInfo = sslInfo;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return ToStringBuilder.reflectionToString(this, ToStringStyle.DEFAULT_STYLE);
|
||||
|
||||
Reference in New Issue
Block a user