fixed pull #5147, reformat & add more configs

This commit is contained in:
jianghang.loujh
2024-06-26 15:33:14 +08:00
parent 5c61f2fb56
commit b0f3ff8dcc
13 changed files with 258 additions and 155 deletions

View File

@@ -12,6 +12,14 @@ canal.instance.master.position=
canal.instance.master.timestamp=
canal.instance.master.gtid=
# ssl
#canal.instance.master.trustCertificateKeyStoreType=
#canal.instance.master.trustCertificateKeyStoreUrl=
#canal.instance.master.trustCertificateKeyStorePassword=
#canal.instance.master.clientCertificateKeyStoreType=
#canal.instance.master.clientCertificateKeyStoreUrl=
#canal.instance.master.clientCertificateKeyStorePassword=
# rds oss binlog
canal.instance.rds.accesskey=
canal.instance.rds.secretkey=

View File

@@ -125,6 +125,18 @@
<property name="pwdPublicKey" value="${canal.instance.pwdPublicKey:retl}" />
<property name="enableDruid" value="${canal.instance.enableDruid:false}" />
<property name="defaultDatabaseName" value="${canal.instance.defaultDatabaseName:}" />
<property name="sslInfo">
<bean class="com.alibaba.otter.canal.parse.driver.mysql.ssl.SslInfo">
<property name="sslMode" value="${canal.instance.master.sslMode:DISABLED}"/>
<property name="tlsVersions" value="${canal.instance.master.tlsVersions:}"/>
<property name="trustCertificateKeyStoreType" value="${canal.instance.master.trustCertificateKeyStoreType:}"/>
<property name="trustCertificateKeyStoreUrl" value="${canal.instance.master.trustCertificateKeyStoreUrl:}"/>
<property name="trustCertificateKeyStorePassword" value="${canal.instance.master.trustCertificateKeyStorePassword:}"/>
<property name="clientCertificateKeyStoreType" value="${canal.instance.master.clientCertificateKeyStoreType:}"/>
<property name="clientCertificateKeyStoreUrl" value="${canal.instance.master.clientCertificateKeyStoreUrl:}"/>
<property name="clientCertificateKeyStorePassword" value="${canal.instance.master.clientCertificateKeyStorePassword:}"/>
</bean>
</property>
</bean>
</property>
<property name="standbyInfo">
@@ -135,6 +147,18 @@
<property name="pwdPublicKey" value="${canal.instance.pwdPublicKey:retl}" />
<property name="enableDruid" value="${canal.instance.enableDruid:false}" />
<property name="defaultDatabaseName" value="${canal.instance.defaultDatabaseName:}" />
<property name="sslInfo">
<bean class="com.alibaba.otter.canal.parse.driver.mysql.ssl.SslInfo">
<property name="sslMode" value="${canal.instance.standby.sslMode:DISABLED}"/>
<property name="tlsVersions" value="${canal.instance.standby.tlsVersions:}"/>
<property name="trustCertificateKeyStoreType" value="${canal.instance.standby.trustCertificateKeyStoreType:}"/>
<property name="trustCertificateKeyStoreUrl" value="${canal.instance.standby.trustCertificateKeyStoreUrl:}"/>
<property name="trustCertificateKeyStorePassword" value="${canal.instance.standby.trustCertificateKeyStorePassword:}"/>
<property name="clientCertificateKeyStoreType" value="${canal.instance.standby.clientCertificateKeyStoreType:}"/>
<property name="clientCertificateKeyStoreUrl" value="${canal.instance.standby.clientCertificateKeyStoreUrl:}"/>
<property name="clientCertificateKeyStorePassword" value="${canal.instance.standby.clientCertificateKeyStorePassword:}"/>
</bean>
</property>
</bean>
</property>

View File

@@ -122,6 +122,18 @@
<property name="pwdPublicKey" value="${canal.instance.pwdPublicKey:retl}" />
<property name="enableDruid" value="${canal.instance.enableDruid:false}" />
<property name="defaultDatabaseName" value="${canal.instance.defaultDatabaseName:}" />
<property name="sslInfo">
<bean class="com.alibaba.otter.canal.parse.driver.mysql.ssl.SslInfo">
<property name="sslMode" value="${canal.instance.master.sslMode:DISABLED}"/>
<property name="tlsVersions" value="${canal.instance.master.tlsVersions:}"/>
<property name="trustCertificateKeyStoreType" value="${canal.instance.master.trustCertificateKeyStoreType:}"/>
<property name="trustCertificateKeyStoreUrl" value="${canal.instance.master.trustCertificateKeyStoreUrl:}"/>
<property name="trustCertificateKeyStorePassword" value="${canal.instance.master.trustCertificateKeyStorePassword:}"/>
<property name="clientCertificateKeyStoreType" value="${canal.instance.master.clientCertificateKeyStoreType:}"/>
<property name="clientCertificateKeyStoreUrl" value="${canal.instance.master.clientCertificateKeyStoreUrl:}"/>
<property name="clientCertificateKeyStorePassword" value="${canal.instance.master.clientCertificateKeyStorePassword:}"/>
</bean>
</property>
</bean>
</property>
<property name="standbyInfo">
@@ -132,6 +144,18 @@
<property name="pwdPublicKey" value="${canal.instance.pwdPublicKey:retl}" />
<property name="enableDruid" value="${canal.instance.enableDruid:false}" />
<property name="defaultDatabaseName" value="${canal.instance.defaultDatabaseName:}" />
<property name="sslInfo">
<bean class="com.alibaba.otter.canal.parse.driver.mysql.ssl.SslInfo">
<property name="sslMode" value="${canal.instance.standby.sslMode:DISABLED}"/>
<property name="tlsVersions" value="${canal.instance.standby.tlsVersions:}"/>
<property name="trustCertificateKeyStoreType" value="${canal.instance.standby.trustCertificateKeyStoreType:}"/>
<property name="trustCertificateKeyStoreUrl" value="${canal.instance.standby.trustCertificateKeyStoreUrl:}"/>
<property name="trustCertificateKeyStorePassword" value="${canal.instance.standby.trustCertificateKeyStorePassword:}"/>
<property name="clientCertificateKeyStoreType" value="${canal.instance.standby.clientCertificateKeyStoreType:}"/>
<property name="clientCertificateKeyStoreUrl" value="${canal.instance.standby.clientCertificateKeyStoreUrl:}"/>
<property name="clientCertificateKeyStorePassword" value="${canal.instance.standby.clientCertificateKeyStorePassword:}"/>
</bean>
</property>
</bean>
</property>
@@ -229,6 +253,18 @@
<property name="pwdPublicKey" value="${canal.instance.pwdPublicKey:retl}" />
<property name="enableDruid" value="${canal.instance.enableDruid:false}" />
<property name="defaultDatabaseName" value="${canal.instance.defaultDatabaseName:}" />
<property name="sslInfo">
<bean class="com.alibaba.otter.canal.parse.driver.mysql.ssl.SslInfo">
<property name="sslMode" value="${canal.instance.master.sslMode:DISABLED}"/>
<property name="tlsVersions" value="${canal.instance.master.tlsVersions:}"/>
<property name="trustCertificateKeyStoreType" value="${canal.instance.master.trustCertificateKeyStoreType:}"/>
<property name="trustCertificateKeyStoreUrl" value="${canal.instance.master.trustCertificateKeyStoreUrl:}"/>
<property name="trustCertificateKeyStorePassword" value="${canal.instance.master.trustCertificateKeyStorePassword:}"/>
<property name="clientCertificateKeyStoreType" value="${canal.instance.master.clientCertificateKeyStoreType:}"/>
<property name="clientCertificateKeyStoreUrl" value="${canal.instance.master.clientCertificateKeyStoreUrl:}"/>
<property name="clientCertificateKeyStorePassword" value="${canal.instance.master.clientCertificateKeyStorePassword:}"/>
</bean>
</property>
</bean>
</property>
<property name="standbyInfo">
@@ -239,6 +275,18 @@
<property name="pwdPublicKey" value="${canal.instance.pwdPublicKey:retl}" />
<property name="enableDruid" value="${canal.instance.enableDruid:false}" />
<property name="defaultDatabaseName" value="${canal.instance.defaultDatabaseName:}" />
<property name="sslInfo">
<bean class="com.alibaba.otter.canal.parse.driver.mysql.ssl.SslInfo">
<property name="sslMode" value="${canal.instance.standby.sslMode:DISABLED}"/>
<property name="tlsVersions" value="${canal.instance.standby.tlsVersions:}"/>
<property name="trustCertificateKeyStoreType" value="${canal.instance.standby.trustCertificateKeyStoreType:}"/>
<property name="trustCertificateKeyStoreUrl" value="${canal.instance.standby.trustCertificateKeyStoreUrl:}"/>
<property name="trustCertificateKeyStorePassword" value="${canal.instance.standby.trustCertificateKeyStorePassword:}"/>
<property name="clientCertificateKeyStoreType" value="${canal.instance.standby.clientCertificateKeyStoreType:}"/>
<property name="clientCertificateKeyStoreUrl" value="${canal.instance.standby.clientCertificateKeyStoreUrl:}"/>
<property name="clientCertificateKeyStorePassword" value="${canal.instance.standby.clientCertificateKeyStorePassword:}"/>
</bean>
</property>
</bean>
</property>

View File

@@ -1,5 +1,7 @@
package com.alibaba.otter.canal.parse.driver.mysql;
import static com.alibaba.otter.canal.parse.driver.mysql.packets.Capability.CLIENT_SSL;
import java.io.IOException;
import java.net.InetSocketAddress;
import java.security.DigestException;
@@ -10,11 +12,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.alibaba.otter.canal.parse.driver.mysql.packets.HeaderPacket;
import com.alibaba.otter.canal.parse.driver.mysql.packets.client.AuthSwitchResponsePacket;
import com.alibaba.otter.canal.parse.driver.mysql.packets.client.ClientAuthenticationPacket;
import com.alibaba.otter.canal.parse.driver.mysql.packets.client.ClientAuthenticationSHA2Packet;
import com.alibaba.otter.canal.parse.driver.mysql.packets.client.QuitCommandPacket;
import com.alibaba.otter.canal.parse.driver.mysql.packets.client.SslRequestCommandPacket;
import com.alibaba.otter.canal.parse.driver.mysql.packets.client.*;
import com.alibaba.otter.canal.parse.driver.mysql.packets.server.*;
import com.alibaba.otter.canal.parse.driver.mysql.socket.SocketChannel;
import com.alibaba.otter.canal.parse.driver.mysql.socket.SocketChannelPool;
@@ -23,7 +21,6 @@ import com.alibaba.otter.canal.parse.driver.mysql.ssl.SslMode;
import com.alibaba.otter.canal.parse.driver.mysql.utils.MSC;
import com.alibaba.otter.canal.parse.driver.mysql.utils.MySQLPasswordEncrypter;
import com.alibaba.otter.canal.parse.driver.mysql.utils.PacketManager;
import static com.alibaba.otter.canal.parse.driver.mysql.packets.Capability.CLIENT_SSL;
/**
* 基于mysql socket协议的链接实现
@@ -67,15 +64,14 @@ public class MysqlConnector {
this.password = password;
}
public MysqlConnector(InetSocketAddress address, String username, String password,
String defaultSchema){
public MysqlConnector(InetSocketAddress address, String username, String password, String defaultSchema){
this(address, username, password);
this.defaultSchema = defaultSchema;
}
public MysqlConnector(InetSocketAddress address, String username, String password,
String defaultSchema, SslInfo sslInfo) {
public MysqlConnector(InetSocketAddress address, String username, String password, String defaultSchema,
SslInfo sslInfo){
this(address, username, password, defaultSchema);
this.sslInfo = sslInfo;
}
@@ -110,7 +106,9 @@ public class MysqlConnector {
sslCipher = result.getFieldValues().get(1);
}
logger.info("connect MysqlConnection in sslMode {}, Ssl_version:{}, Ssl_cipher:{}",
(sslInfo != null ? sslInfo.getSslMode() : SslMode.DISABLED), sslVersion, sslCipher);
(sslInfo != null ? sslInfo.getSslMode() : SslMode.DISABLED),
sslVersion,
sslCipher);
} catch (Exception e) {
logger.info("Can't show SSL status, server may not standard MySQL server: {}", e.toString());
logger.debug("show SSL status exception", e);
@@ -206,8 +204,8 @@ public class MysqlConnector {
if (sslMode != SslMode.DISABLED) {
boolean serverSupportSsl = (handshakePacket.serverCapabilities & CLIENT_SSL) > 0;
if (!serverSupportSsl) {
throw new IOException("MySQL Server does not support SSL: " + address
+ " serverCapabilities: " + handshakePacket.serverCapabilities);
throw new IOException("MySQL Server does not support SSL: " + address + " serverCapabilities: "
+ handshakePacket.serverCapabilities);
}
byte[] sslPacket = new SslRequestCommandPacket(handshakePacket.serverCharsetNumber).toBytes();
HeaderPacket sslHeader = new HeaderPacket();

View File

@@ -15,7 +15,9 @@ public class SslRequestCommandPacket implements IPacket {
private final int serverCharsetNumber;
public SslRequestCommandPacket(int serverCharsetNumber) {this.serverCharsetNumber = serverCharsetNumber;}
public SslRequestCommandPacket(int serverCharsetNumber){
this.serverCharsetNumber = serverCharsetNumber;
}
@Override
public void fromBytes(byte[] data) throws IOException {
@@ -25,10 +27,8 @@ public class SslRequestCommandPacket implements IPacket {
@Override
public byte[] toBytes() throws IOException {
ByteArrayOutputStream out = new ByteArrayOutputStream();
int clientCapabilities = Capability.CLIENT_LONG_FLAG
| Capability.CLIENT_PROTOCOL_41
| Capability.CLIENT_SECURE_CONNECTION
| Capability.CLIENT_PLUGIN_AUTH
int clientCapabilities = Capability.CLIENT_LONG_FLAG | Capability.CLIENT_PROTOCOL_41
| Capability.CLIENT_SECURE_CONNECTION | Capability.CLIENT_PLUGIN_AUTH
| Capability.CLIENT_SSL;
ByteHelper.writeUnsignedIntLittleEndian(clientCapabilities, out);
ByteHelper.writeUnsignedIntLittleEndian(0, out);

View File

@@ -92,9 +92,9 @@ public class BioSocketChannel implements SocketChannel {
}
}
if (remain > 0 && accTimeout >= timeout) {
throw new SocketTimeoutException("Timeout occurred, failed to read total " + readSize + " bytes in "
+ timeout + " milliseconds, actual read only " + (readSize - remain)
+ " bytes");
throw new SocketTimeoutException(
"Timeout occurred, failed to read total " + readSize + " bytes in " + timeout
+ " milliseconds, actual read only " + (readSize - remain) + " bytes");
}
return data;
}
@@ -137,9 +137,11 @@ public class BioSocketChannel implements SocketChannel {
}
return false;
}
public boolean isSsl() {
return ssl;
}
public Socket getSocket() {
return socket;
}

View File

@@ -8,11 +8,7 @@ import java.net.URL;
import java.security.InvalidAlgorithmParameterException;
import java.security.KeyStore;
import java.security.cert.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.*;
import java.util.stream.Collectors;
import javax.naming.InvalidNameException;
@@ -21,18 +17,19 @@ import javax.naming.ldap.Rdn;
import javax.net.ssl.*;
import javax.security.auth.x500.X500Principal;
import com.alibaba.otter.canal.parse.driver.mysql.ssl.SslInfo;
import com.alibaba.otter.canal.parse.driver.mysql.ssl.SslMode;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.alibaba.otter.canal.parse.driver.mysql.ssl.SslInfo;
import com.alibaba.otter.canal.parse.driver.mysql.ssl.SslMode;
/**
* @author luoyaogui 实现channel的管理(监听连接、读数据、回收) 2016-12-28
* @author chuanyi 2018-3-3 保留<code>open</code>减少文件变更数量
*/
public abstract class BioSocketChannelPool {
private static final Logger logger = LoggerFactory.getLogger(BioSocketChannelPool.class);
public static BioSocketChannel open(SocketAddress address) throws Exception {
@@ -42,7 +39,6 @@ public abstract class BioSocketChannelPool {
public static BioSocketChannel openSsl(Socket socket, SslInfo sslInfo) throws Exception {
SslMode sslMode = sslInfo.getSslMode();
switch (sslMode) {
case REQUIRED:
case PREFERRED:
@@ -67,9 +63,7 @@ public abstract class BioSocketChannelPool {
}
/**
* from JDBC driver
*
* com.mysql.cj.protocol.ExportControlled#performTlsHandshake
* from JDBC driver com.mysql.cj.protocol.ExportControlled#performTlsHandshake
* com.mysql.cj.protocol.ExportControlled#getSSLContext
*
* @param socket
@@ -82,14 +76,12 @@ public abstract class BioSocketChannelPool {
boolean verifyServerCert = sslMode == SslMode.VERIFY_CA || sslMode == SslMode.VERIFY_IDENTITY;
String clientCertificateKeyStoreUrl = sslInfo.getClientCertificateKeyStoreUrl();
String clientCertificateKeyStoreType = sslInfo.getClientCertificateKeyStoreType() != null
? sslInfo.getClientCertificateKeyStoreType()
: "JKS";
String clientCertificateKeyStoreType = sslInfo.getClientCertificateKeyStoreType() != null ? sslInfo
.getClientCertificateKeyStoreType() : "JKS";
String clientCertificateKeyStorePassword = sslInfo.getClientCertificateKeyStorePassword();
String trustCertificateKeyStoreUrl = sslInfo.getTrustCertificateKeyStoreUrl();
String trustCertificateKeyStoreType = sslInfo.getTrustCertificateKeyStoreType() != null
? sslInfo.getTrustCertificateKeyStoreType()
: "JKS";
String trustCertificateKeyStoreType = sslInfo.getTrustCertificateKeyStoreType() != null ? sslInfo
.getTrustCertificateKeyStoreType() : "JKS";
String trustCertificateKeyStorePassword = sslInfo.getTrustCertificateKeyStorePassword();
boolean fallbackToDefaultTrustStore = true;
String hostName = sslMode == SslMode.VERIFY_IDENTITY ? socket.getInetAddress().getHostName() : null;
@@ -97,14 +89,16 @@ public abstract class BioSocketChannelPool {
SSLContext sslContext = getSSLContext(clientCertificateKeyStoreUrl,
clientCertificateKeyStoreType,
clientCertificateKeyStorePassword,
trustCertificateKeyStoreUrl, trustCertificateKeyStoreType,
trustCertificateKeyStoreUrl,
trustCertificateKeyStoreType,
trustCertificateKeyStorePassword,
fallbackToDefaultTrustStore,
verifyServerCert, hostName);
verifyServerCert,
hostName);
SSLSocketFactory socketFactory = sslContext.getSocketFactory();
SSLSocket sslSocket = (SSLSocket)socketFactory.createSocket(
socket, socket.getInetAddress().getHostName(), socket.getPort(), true);
SSLSocket sslSocket = (SSLSocket) socketFactory
.createSocket(socket, socket.getInetAddress().getHostName(), socket.getPort(), true);
String[] protocolArr = null;
if (StringUtils.isNotEmpty(sslInfo.getTlsVersions())) {
@@ -125,8 +119,8 @@ public abstract class BioSocketChannelPool {
String clientCertificateKeyStorePassword,
String trustCertificateKeyStoreUrl, String trustCertificateKeyStoreType,
String trustCertificateKeyStorePassword,
boolean fallbackToDefaultTrustStore, boolean verifyServerCert, String hostName)
throws Exception {
boolean fallbackToDefaultTrustStore, boolean verifyServerCert,
String hostName) throws Exception {
KeyManager[] kms = null;
List<TrustManager> tms = new ArrayList<>();
@@ -140,8 +134,8 @@ public abstract class BioSocketChannelPool {
if (StringUtils.isNotEmpty(clientCertificateKeyStoreType)) {
KeyStore clientKeyStore = KeyStore.getInstance(clientCertificateKeyStoreType);
URL ksURL = new URL(clientCertificateKeyStoreUrl);
char[] password = (clientCertificateKeyStorePassword == null) ? new char[0]
: clientCertificateKeyStorePassword.toCharArray();
char[] password = (clientCertificateKeyStorePassword == null) ? new char[0] : clientCertificateKeyStorePassword
.toCharArray();
ksIS = ksURL.openStream();
clientKeyStore.load(ksIS, password);
kmf.init(clientKeyStore, password);
@@ -152,7 +146,8 @@ public abstract class BioSocketChannelPool {
try {
ksIS.close();
} catch (IOException e) {
// can't close input stream, but keystore can be properly initialized so we shouldn't throw
// can't close input stream, but keystore can be properly initialized so we
// shouldn't throw
// this exception
}
}
@@ -165,11 +160,11 @@ public abstract class BioSocketChannelPool {
char[] trustStorePassword = null;
KeyStore trustKeyStore = null;
if (StringUtils.isNotEmpty(trustCertificateKeyStoreUrl) && StringUtils.isNotEmpty(
trustCertificateKeyStoreType)) {
if (StringUtils.isNotEmpty(trustCertificateKeyStoreUrl)
&& StringUtils.isNotEmpty(trustCertificateKeyStoreType)) {
trustStoreType = trustCertificateKeyStoreType;
trustStorePassword = (trustCertificateKeyStorePassword == null) ? new char[0]
: trustCertificateKeyStorePassword.toCharArray();
trustStorePassword = (trustCertificateKeyStorePassword == null) ? new char[0] : trustCertificateKeyStorePassword
.toCharArray();
trustStoreIS = new URL(trustCertificateKeyStoreUrl).openStream();
trustKeyStore = KeyStore.getInstance(trustStoreType);
@@ -178,15 +173,18 @@ public abstract class BioSocketChannelPool {
if (trustKeyStore != null || fallbackToDefaultTrustStore) {
tmf.init(trustKeyStore);
// (trustKeyStore == null) initializes the TrustManagerFactory with the default truststore.
// (trustKeyStore == null) initializes the TrustManagerFactory with the default
// truststore.
// building the customized list of TrustManagers from original one if it's available
// building the customized list of TrustManagers from original one if it's
// available
TrustManager[] origTms = tmf.getTrustManagers();
for (TrustManager tm : origTms) {
// wrap X509TrustManager or put original if non-X509 TrustManager
tms.add(tm instanceof X509TrustManager ? new X509TrustManagerWrapper((X509TrustManager) tm,
verifyServerCert, hostName) : tm);
verifyServerCert,
hostName) : tm);
}
}
@@ -195,13 +193,15 @@ public abstract class BioSocketChannelPool {
try {
trustStoreIS.close();
} catch (IOException e) {
// can't close input stream, but keystore can be properly initialized so we shouldn't throw this
// can't close input stream, but keystore can be properly initialized so we
// shouldn't throw this
// exception
}
}
}
// if original TrustManagers are not available then putting one X509TrustManagerWrapper which take care only
// if original TrustManagers are not available then putting one
// X509TrustManagerWrapper which take care only
// about expiration check
if (tms.size() == 0) {
tms.add(new X509TrustManagerWrapper(verifyServerCert, hostName));
@@ -221,17 +221,17 @@ public abstract class BioSocketChannelPool {
private PKIXParameters validatorParams = null;
private CertPathValidator validator = null;
public X509TrustManagerWrapper(X509TrustManager tm, boolean verifyServerCertificate, String hostName)
throws CertificateException {
public X509TrustManagerWrapper(X509TrustManager tm, boolean verifyServerCertificate,
String hostName) throws CertificateException{
this.origTm = tm;
this.verifyServerCert = verifyServerCertificate;
this.hostName = hostName;
if (verifyServerCertificate) {
try {
Set<TrustAnchor> anch = Arrays.stream(tm.getAcceptedIssuers()).map(c -> new TrustAnchor(c, null))
.collect(
Collectors.toSet());
Set<TrustAnchor> anch = Arrays.stream(tm.getAcceptedIssuers())
.map(c -> new TrustAnchor(c, null))
.collect(Collectors.toSet());
this.validatorParams = new PKIXParameters(anch);
this.validatorParams.setRevocationEnabled(false);
this.validator = CertPathValidator.getInstance("PKIX");
@@ -308,7 +308,9 @@ public abstract class BioSocketChannelPool {
if (!expectHostNames.contains(this.hostName)) {
throw new CertificateException(
"Server certificate identity check failed. The certificate Common Name "
+ expectHostNames.stream().map(h -> "'" + h + "'").collect(Collectors.joining(", "))
+ expectHostNames.stream()
.map(h -> "'" + h + "'")
.collect(Collectors.joining(", "))
+ " does not match with '" + this.hostName + "'.");
}

View File

@@ -3,18 +3,19 @@ package com.alibaba.otter.canal.parse.driver.mysql.socket;
import java.io.IOException;
import java.net.SocketAddress;
import com.alibaba.otter.canal.parse.driver.mysql.ssl.SslInfo;
import com.alibaba.otter.canal.parse.driver.mysql.ssl.SslMode;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.alibaba.otter.canal.parse.driver.mysql.ssl.SslInfo;
import com.alibaba.otter.canal.parse.driver.mysql.ssl.SslMode;
/**
* @author agapple 2018年3月12日 下午10:46:22
* @since 1.0.26
*/
public abstract class SocketChannelPool {
private static final Logger logger = LoggerFactory.getLogger(SocketChannelPool.class);
public static SocketChannel open(SocketAddress address) throws Exception {
@@ -35,8 +36,7 @@ public abstract class SocketChannelPool {
} else {
SocketAddress remoteSocketAddress = channel.getRemoteSocketAddress();
try {
return BioSocketChannelPool.openSsl(
((BioSocketChannel)channel).getSocket(), sslInfo);
return BioSocketChannelPool.openSsl(((BioSocketChannel) channel).getSocket(), sslInfo);
} catch (Exception e) {
if (sslMode == SslMode.PREFERRED) {
// still use non ssl channel

View File

@@ -17,8 +17,8 @@ public class SslInfo {
public SslInfo(SslMode sslMode, String tlsVersions, String trustCertificateKeyStoreType,
String trustCertificateKeyStoreUrl, String trustCertificateKeyStorePassword,
String clientCertificateKeyStoreType,
String clientCertificateKeyStoreUrl, String clientCertificateKeyStorePassword) {
String clientCertificateKeyStoreType, String clientCertificateKeyStoreUrl,
String clientCertificateKeyStorePassword) {
this.sslMode = sslMode;
this.tlsVersions = tlsVersions;
this.trustCertificateKeyStoreType = trustCertificateKeyStoreType;

View File

@@ -67,11 +67,17 @@ public class CanalParameter implements Serializable {
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 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 clientCertificateKeyStoreType; // client 证书类型,支持
// JKS (默认) 和
// PKCS12
private String clientCertificateKeyStoreUrl; // client 证书路径
private String clientCertificateKeyStorePassword; // client 证书密码
@@ -118,11 +124,17 @@ public class CanalParameter implements Serializable {
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 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 masterClientCertificateKeyStoreType; // client 证书类型,支持
// JKS (默认) 和
// PKCS12
private String masterClientCertificateKeyStoreUrl; // client 证书路径
private String masterClientCertificateKeyStorePassword; // client 证书密码
@@ -130,11 +142,17 @@ public class CanalParameter implements Serializable {
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 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 standbyClientCertificateKeyStoreType; // client 证书类型,支持
// JKS (默认) 和
// PKCS12
private String standbyClientCertificateKeyStoreUrl; // client 证书路径
private String standbyClientCertificateKeyStorePassword; // client 证书密码
@@ -209,6 +227,7 @@ public class CanalParameter implements Serializable {
}
public static enum StorageMode {
/** 内存存储模式 */
MEMORY,
/** 文件存储模式 */
@@ -231,6 +250,7 @@ public class CanalParameter implements Serializable {
}
public static enum StorageScavengeMode {
/** 在存储满的时候触发 */
ON_FULL,
/** 在每次有ack请求时触发 */
@@ -258,6 +278,7 @@ public class CanalParameter implements Serializable {
}
public static enum SourcingType {
/** mysql DB */
MYSQL,
/** localBinLog */
@@ -285,6 +306,7 @@ public class CanalParameter implements Serializable {
}
public static enum MetaMode {
/** 内存存储模式 */
MEMORY,
/** 文件存储模式 */
@@ -312,6 +334,7 @@ public class CanalParameter implements Serializable {
}
public static enum IndexMode {
/** 内存存储模式 */
MEMORY,
/** 文件存储模式 */
@@ -345,6 +368,7 @@ public class CanalParameter implements Serializable {
}
public static enum BatchMode {
/** 对象数量 */
ITEMSIZE,

View File

@@ -74,8 +74,7 @@ public class MysqlConnection implements ErosaConnection {
connector.setConnTimeout(connTimeout);
}
public MysqlConnection(InetSocketAddress address, String username, String password,
String defaultSchema){
public MysqlConnection(InetSocketAddress address, String username, String password, String defaultSchema){
authInfo = new AuthenticationInfo();
authInfo.setAddress(address);
authInfo.setUsername(username);
@@ -87,8 +86,8 @@ public class MysqlConnection implements ErosaConnection {
connector.setConnTimeout(connTimeout);
}
public MysqlConnection(InetSocketAddress address, String username, String password,
String defaultSchema, SslInfo sslInfo){
public MysqlConnection(InetSocketAddress address, String username, String password, String defaultSchema,
SslInfo sslInfo){
authInfo = new AuthenticationInfo();
authInfo.setAddress(address);
authInfo.setUsername(username);

View File

@@ -2,12 +2,12 @@ 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;
import com.alibaba.otter.canal.common.utils.CommonUtils;
import com.alibaba.otter.canal.parse.driver.mysql.ssl.SslInfo;
/**
* 数据库认证信息
*
@@ -16,8 +16,6 @@ import org.apache.commons.lang.builder.ToStringStyle;
*/
public class AuthenticationInfo {
private InetSocketAddress address; // 主库信息
private String username; // 帐号
private String password; // 密码
@@ -47,8 +45,8 @@ public class AuthenticationInfo {
this.defaultDatabaseName = defaultDatabaseName;
}
public AuthenticationInfo(InetSocketAddress address, String username, String password,
String defaultDatabaseName, SslInfo sslInfo) {
public AuthenticationInfo(InetSocketAddress address, String username, String password, String defaultDatabaseName,
SslInfo sslInfo){
this(address, username, password, defaultDatabaseName);
this.sslInfo = sslInfo;
}