Skip to content

Commit b0f3ff8

Browse files
committed
fixed pull #5147, reformat & add more configs
1 parent 5c61f2f commit b0f3ff8

File tree

13 files changed

+258
-155
lines changed

13 files changed

+258
-155
lines changed

deployer/src/main/resources/example/instance.properties

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,14 @@ canal.instance.master.position=
1212
canal.instance.master.timestamp=
1313
canal.instance.master.gtid=
1414

15+
# ssl
16+
#canal.instance.master.trustCertificateKeyStoreType=
17+
#canal.instance.master.trustCertificateKeyStoreUrl=
18+
#canal.instance.master.trustCertificateKeyStorePassword=
19+
#canal.instance.master.clientCertificateKeyStoreType=
20+
#canal.instance.master.clientCertificateKeyStoreUrl=
21+
#canal.instance.master.clientCertificateKeyStorePassword=
22+
1523
# rds oss binlog
1624
canal.instance.rds.accesskey=
1725
canal.instance.rds.secretkey=

deployer/src/main/resources/spring/base-instance.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,4 +36,4 @@
3636
<property name="secretkey" value="${canal.aliyun.secretkey:}" />
3737
<property name="instanceId" value="${canal.instance.rds.instanceId:}" />
3838
</bean>
39-
</beans>
39+
</beans>

deployer/src/main/resources/spring/file-instance.xml

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,18 @@
125125
<property name="pwdPublicKey" value="${canal.instance.pwdPublicKey:retl}" />
126126
<property name="enableDruid" value="${canal.instance.enableDruid:false}" />
127127
<property name="defaultDatabaseName" value="${canal.instance.defaultDatabaseName:}" />
128+
<property name="sslInfo">
129+
<bean class="com.alibaba.otter.canal.parse.driver.mysql.ssl.SslInfo">
130+
<property name="sslMode" value="${canal.instance.master.sslMode:DISABLED}"/>
131+
<property name="tlsVersions" value="${canal.instance.master.tlsVersions:}"/>
132+
<property name="trustCertificateKeyStoreType" value="${canal.instance.master.trustCertificateKeyStoreType:}"/>
133+
<property name="trustCertificateKeyStoreUrl" value="${canal.instance.master.trustCertificateKeyStoreUrl:}"/>
134+
<property name="trustCertificateKeyStorePassword" value="${canal.instance.master.trustCertificateKeyStorePassword:}"/>
135+
<property name="clientCertificateKeyStoreType" value="${canal.instance.master.clientCertificateKeyStoreType:}"/>
136+
<property name="clientCertificateKeyStoreUrl" value="${canal.instance.master.clientCertificateKeyStoreUrl:}"/>
137+
<property name="clientCertificateKeyStorePassword" value="${canal.instance.master.clientCertificateKeyStorePassword:}"/>
138+
</bean>
139+
</property>
128140
</bean>
129141
</property>
130142
<property name="standbyInfo">
@@ -135,6 +147,18 @@
135147
<property name="pwdPublicKey" value="${canal.instance.pwdPublicKey:retl}" />
136148
<property name="enableDruid" value="${canal.instance.enableDruid:false}" />
137149
<property name="defaultDatabaseName" value="${canal.instance.defaultDatabaseName:}" />
150+
<property name="sslInfo">
151+
<bean class="com.alibaba.otter.canal.parse.driver.mysql.ssl.SslInfo">
152+
<property name="sslMode" value="${canal.instance.standby.sslMode:DISABLED}"/>
153+
<property name="tlsVersions" value="${canal.instance.standby.tlsVersions:}"/>
154+
<property name="trustCertificateKeyStoreType" value="${canal.instance.standby.trustCertificateKeyStoreType:}"/>
155+
<property name="trustCertificateKeyStoreUrl" value="${canal.instance.standby.trustCertificateKeyStoreUrl:}"/>
156+
<property name="trustCertificateKeyStorePassword" value="${canal.instance.standby.trustCertificateKeyStorePassword:}"/>
157+
<property name="clientCertificateKeyStoreType" value="${canal.instance.standby.clientCertificateKeyStoreType:}"/>
158+
<property name="clientCertificateKeyStoreUrl" value="${canal.instance.standby.clientCertificateKeyStoreUrl:}"/>
159+
<property name="clientCertificateKeyStorePassword" value="${canal.instance.standby.clientCertificateKeyStorePassword:}"/>
160+
</bean>
161+
</property>
138162
</bean>
139163
</property>
140164

deployer/src/main/resources/spring/group-instance.xml

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,18 @@
122122
<property name="pwdPublicKey" value="${canal.instance.pwdPublicKey:retl}" />
123123
<property name="enableDruid" value="${canal.instance.enableDruid:false}" />
124124
<property name="defaultDatabaseName" value="${canal.instance.defaultDatabaseName:}" />
125+
<property name="sslInfo">
126+
<bean class="com.alibaba.otter.canal.parse.driver.mysql.ssl.SslInfo">
127+
<property name="sslMode" value="${canal.instance.master.sslMode:DISABLED}"/>
128+
<property name="tlsVersions" value="${canal.instance.master.tlsVersions:}"/>
129+
<property name="trustCertificateKeyStoreType" value="${canal.instance.master.trustCertificateKeyStoreType:}"/>
130+
<property name="trustCertificateKeyStoreUrl" value="${canal.instance.master.trustCertificateKeyStoreUrl:}"/>
131+
<property name="trustCertificateKeyStorePassword" value="${canal.instance.master.trustCertificateKeyStorePassword:}"/>
132+
<property name="clientCertificateKeyStoreType" value="${canal.instance.master.clientCertificateKeyStoreType:}"/>
133+
<property name="clientCertificateKeyStoreUrl" value="${canal.instance.master.clientCertificateKeyStoreUrl:}"/>
134+
<property name="clientCertificateKeyStorePassword" value="${canal.instance.master.clientCertificateKeyStorePassword:}"/>
135+
</bean>
136+
</property>
125137
</bean>
126138
</property>
127139
<property name="standbyInfo">
@@ -132,6 +144,18 @@
132144
<property name="pwdPublicKey" value="${canal.instance.pwdPublicKey:retl}" />
133145
<property name="enableDruid" value="${canal.instance.enableDruid:false}" />
134146
<property name="defaultDatabaseName" value="${canal.instance.defaultDatabaseName:}" />
147+
<property name="sslInfo">
148+
<bean class="com.alibaba.otter.canal.parse.driver.mysql.ssl.SslInfo">
149+
<property name="sslMode" value="${canal.instance.standby.sslMode:DISABLED}"/>
150+
<property name="tlsVersions" value="${canal.instance.standby.tlsVersions:}"/>
151+
<property name="trustCertificateKeyStoreType" value="${canal.instance.standby.trustCertificateKeyStoreType:}"/>
152+
<property name="trustCertificateKeyStoreUrl" value="${canal.instance.standby.trustCertificateKeyStoreUrl:}"/>
153+
<property name="trustCertificateKeyStorePassword" value="${canal.instance.standby.trustCertificateKeyStorePassword:}"/>
154+
<property name="clientCertificateKeyStoreType" value="${canal.instance.standby.clientCertificateKeyStoreType:}"/>
155+
<property name="clientCertificateKeyStoreUrl" value="${canal.instance.standby.clientCertificateKeyStoreUrl:}"/>
156+
<property name="clientCertificateKeyStorePassword" value="${canal.instance.standby.clientCertificateKeyStorePassword:}"/>
157+
</bean>
158+
</property>
135159
</bean>
136160
</property>
137161

@@ -229,6 +253,18 @@
229253
<property name="pwdPublicKey" value="${canal.instance.pwdPublicKey:retl}" />
230254
<property name="enableDruid" value="${canal.instance.enableDruid:false}" />
231255
<property name="defaultDatabaseName" value="${canal.instance.defaultDatabaseName:}" />
256+
<property name="sslInfo">
257+
<bean class="com.alibaba.otter.canal.parse.driver.mysql.ssl.SslInfo">
258+
<property name="sslMode" value="${canal.instance.master.sslMode:DISABLED}"/>
259+
<property name="tlsVersions" value="${canal.instance.master.tlsVersions:}"/>
260+
<property name="trustCertificateKeyStoreType" value="${canal.instance.master.trustCertificateKeyStoreType:}"/>
261+
<property name="trustCertificateKeyStoreUrl" value="${canal.instance.master.trustCertificateKeyStoreUrl:}"/>
262+
<property name="trustCertificateKeyStorePassword" value="${canal.instance.master.trustCertificateKeyStorePassword:}"/>
263+
<property name="clientCertificateKeyStoreType" value="${canal.instance.master.clientCertificateKeyStoreType:}"/>
264+
<property name="clientCertificateKeyStoreUrl" value="${canal.instance.master.clientCertificateKeyStoreUrl:}"/>
265+
<property name="clientCertificateKeyStorePassword" value="${canal.instance.master.clientCertificateKeyStorePassword:}"/>
266+
</bean>
267+
</property>
232268
</bean>
233269
</property>
234270
<property name="standbyInfo">
@@ -239,6 +275,18 @@
239275
<property name="pwdPublicKey" value="${canal.instance.pwdPublicKey:retl}" />
240276
<property name="enableDruid" value="${canal.instance.enableDruid:false}" />
241277
<property name="defaultDatabaseName" value="${canal.instance.defaultDatabaseName:}" />
278+
<property name="sslInfo">
279+
<bean class="com.alibaba.otter.canal.parse.driver.mysql.ssl.SslInfo">
280+
<property name="sslMode" value="${canal.instance.standby.sslMode:DISABLED}"/>
281+
<property name="tlsVersions" value="${canal.instance.standby.tlsVersions:}"/>
282+
<property name="trustCertificateKeyStoreType" value="${canal.instance.standby.trustCertificateKeyStoreType:}"/>
283+
<property name="trustCertificateKeyStoreUrl" value="${canal.instance.standby.trustCertificateKeyStoreUrl:}"/>
284+
<property name="trustCertificateKeyStorePassword" value="${canal.instance.standby.trustCertificateKeyStorePassword:}"/>
285+
<property name="clientCertificateKeyStoreType" value="${canal.instance.standby.clientCertificateKeyStoreType:}"/>
286+
<property name="clientCertificateKeyStoreUrl" value="${canal.instance.standby.clientCertificateKeyStoreUrl:}"/>
287+
<property name="clientCertificateKeyStorePassword" value="${canal.instance.standby.clientCertificateKeyStorePassword:}"/>
288+
</bean>
289+
</property>
242290
</bean>
243291
</property>
244292

driver/src/main/java/com/alibaba/otter/canal/parse/driver/mysql/MysqlConnector.java

Lines changed: 16 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package com.alibaba.otter.canal.parse.driver.mysql;
22

3+
import static com.alibaba.otter.canal.parse.driver.mysql.packets.Capability.CLIENT_SSL;
4+
35
import java.io.IOException;
46
import java.net.InetSocketAddress;
57
import java.security.DigestException;
@@ -10,11 +12,7 @@
1012
import org.slf4j.LoggerFactory;
1113

1214
import com.alibaba.otter.canal.parse.driver.mysql.packets.HeaderPacket;
13-
import com.alibaba.otter.canal.parse.driver.mysql.packets.client.AuthSwitchResponsePacket;
14-
import com.alibaba.otter.canal.parse.driver.mysql.packets.client.ClientAuthenticationPacket;
15-
import com.alibaba.otter.canal.parse.driver.mysql.packets.client.ClientAuthenticationSHA2Packet;
16-
import com.alibaba.otter.canal.parse.driver.mysql.packets.client.QuitCommandPacket;
17-
import com.alibaba.otter.canal.parse.driver.mysql.packets.client.SslRequestCommandPacket;
15+
import com.alibaba.otter.canal.parse.driver.mysql.packets.client.*;
1816
import com.alibaba.otter.canal.parse.driver.mysql.packets.server.*;
1917
import com.alibaba.otter.canal.parse.driver.mysql.socket.SocketChannel;
2018
import com.alibaba.otter.canal.parse.driver.mysql.socket.SocketChannelPool;
@@ -23,7 +21,6 @@
2321
import com.alibaba.otter.canal.parse.driver.mysql.utils.MSC;
2422
import com.alibaba.otter.canal.parse.driver.mysql.utils.MySQLPasswordEncrypter;
2523
import com.alibaba.otter.canal.parse.driver.mysql.utils.PacketManager;
26-
import static com.alibaba.otter.canal.parse.driver.mysql.packets.Capability.CLIENT_SSL;
2724

2825
/**
2926
* 基于mysql socket协议的链接实现
@@ -37,7 +34,7 @@ public class MysqlConnector {
3734
private InetSocketAddress address;
3835
private String username;
3936
private String password;
40-
private SslInfo sslInfo;
37+
private SslInfo sslInfo;
4138

4239
private String defaultSchema;
4340
private int soTimeout = 30 * 1000;
@@ -67,15 +64,14 @@ public MysqlConnector(InetSocketAddress address, String username, String passwor
6764
this.password = password;
6865
}
6966

70-
public MysqlConnector(InetSocketAddress address, String username, String password,
71-
String defaultSchema){
67+
public MysqlConnector(InetSocketAddress address, String username, String password, String defaultSchema){
7268
this(address, username, password);
7369

7470
this.defaultSchema = defaultSchema;
7571
}
7672

77-
public MysqlConnector(InetSocketAddress address, String username, String password,
78-
String defaultSchema, SslInfo sslInfo) {
73+
public MysqlConnector(InetSocketAddress address, String username, String password, String defaultSchema,
74+
SslInfo sslInfo){
7975
this(address, username, password, defaultSchema);
8076
this.sslInfo = sslInfo;
8177
}
@@ -110,7 +106,9 @@ private void printSslStatus() {
110106
sslCipher = result.getFieldValues().get(1);
111107
}
112108
logger.info("connect MysqlConnection in sslMode {}, Ssl_version:{}, Ssl_cipher:{}",
113-
(sslInfo != null ? sslInfo.getSslMode() : SslMode.DISABLED), sslVersion, sslCipher);
109+
(sslInfo != null ? sslInfo.getSslMode() : SslMode.DISABLED),
110+
sslVersion,
111+
sslCipher);
114112
} catch (Exception e) {
115113
logger.info("Can't show SSL status, server may not standard MySQL server: {}", e.toString());
116114
logger.debug("show SSL status exception", e);
@@ -206,21 +204,21 @@ private void negotiate(SocketChannel channel) throws IOException {
206204
if (sslMode != SslMode.DISABLED) {
207205
boolean serverSupportSsl = (handshakePacket.serverCapabilities & CLIENT_SSL) > 0;
208206
if (!serverSupportSsl) {
209-
throw new IOException("MySQL Server does not support SSL: " + address
210-
+ " serverCapabilities: " + handshakePacket.serverCapabilities);
207+
throw new IOException("MySQL Server does not support SSL: " + address + " serverCapabilities: "
208+
+ handshakePacket.serverCapabilities);
211209
}
212210
byte[] sslPacket = new SslRequestCommandPacket(handshakePacket.serverCharsetNumber).toBytes();
213211
HeaderPacket sslHeader = new HeaderPacket();
214212
sslHeader.setPacketBodyLength(sslPacket.length);
215-
sslHeader.setPacketSequenceNumber((byte)(header.getPacketSequenceNumber() + 1));
216-
header.setPacketSequenceNumber((byte)(header.getPacketSequenceNumber() + 1));
213+
sslHeader.setPacketSequenceNumber((byte) (header.getPacketSequenceNumber() + 1));
214+
header.setPacketSequenceNumber((byte) (header.getPacketSequenceNumber() + 1));
217215
PacketManager.writePkg(channel, sslHeader.toBytes(), sslPacket);
218216
channel = SocketChannelPool.connectSsl(channel, sslInfo);
219217
this.channel = channel;
220218
}
221219
if (handshakePacket.protocolVersion != MSC.DEFAULT_PROTOCOL_VERSION) {
222220
// HandshakeV9
223-
auth323(channel, (byte)(header.getPacketSequenceNumber() + 1), handshakePacket.seed);
221+
auth323(channel, (byte) (header.getPacketSequenceNumber() + 1), handshakePacket.seed);
224222
return;
225223
}
226224

@@ -248,7 +246,7 @@ private void negotiate(SocketChannel channel) throws IOException {
248246
byte[] clientAuthPkgBody = clientAuth.toBytes();
249247
HeaderPacket h = new HeaderPacket();
250248
h.setPacketBodyLength(clientAuthPkgBody.length);
251-
h.setPacketSequenceNumber((byte)(header.getPacketSequenceNumber() + 1));
249+
h.setPacketSequenceNumber((byte) (header.getPacketSequenceNumber() + 1));
252250

253251
PacketManager.writePkg(channel, h.toBytes(), clientAuthPkgBody);
254252
logger.info("client authentication packet is sent out.");

driver/src/main/java/com/alibaba/otter/canal/parse/driver/mysql/packets/client/SslRequestCommandPacket.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,9 @@ public class SslRequestCommandPacket implements IPacket {
1515

1616
private final int serverCharsetNumber;
1717

18-
public SslRequestCommandPacket(int serverCharsetNumber) {this.serverCharsetNumber = serverCharsetNumber;}
18+
public SslRequestCommandPacket(int serverCharsetNumber){
19+
this.serverCharsetNumber = serverCharsetNumber;
20+
}
1921

2022
@Override
2123
public void fromBytes(byte[] data) throws IOException {
@@ -25,11 +27,9 @@ public void fromBytes(byte[] data) throws IOException {
2527
@Override
2628
public byte[] toBytes() throws IOException {
2729
ByteArrayOutputStream out = new ByteArrayOutputStream();
28-
int clientCapabilities = Capability.CLIENT_LONG_FLAG
29-
| Capability.CLIENT_PROTOCOL_41
30-
| Capability.CLIENT_SECURE_CONNECTION
31-
| Capability.CLIENT_PLUGIN_AUTH
32-
| Capability.CLIENT_SSL;
30+
int clientCapabilities = Capability.CLIENT_LONG_FLAG | Capability.CLIENT_PROTOCOL_41
31+
| Capability.CLIENT_SECURE_CONNECTION | Capability.CLIENT_PLUGIN_AUTH
32+
| Capability.CLIENT_SSL;
3333
ByteHelper.writeUnsignedIntLittleEndian(clientCapabilities, out);
3434
ByteHelper.writeUnsignedIntLittleEndian(0, out);
3535
out.write(serverCharsetNumber);

driver/src/main/java/com/alibaba/otter/canal/parse/driver/mysql/socket/BioSocketChannel.java

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,11 @@
1919
*/
2020
public class BioSocketChannel implements SocketChannel {
2121

22-
static final int DEFAULT_CONNECT_TIMEOUT = 10 * 1000;
23-
static final int SO_TIMEOUT = 1000;
24-
private Socket socket;
25-
private InputStream input;
26-
private OutputStream output;
22+
static final int DEFAULT_CONNECT_TIMEOUT = 10 * 1000;
23+
static final int SO_TIMEOUT = 1000;
24+
private Socket socket;
25+
private InputStream input;
26+
private OutputStream output;
2727
private final boolean ssl;
2828

2929
BioSocketChannel(Socket socket) throws IOException{
@@ -92,9 +92,9 @@ public byte[] read(int readSize, int timeout) throws IOException {
9292
}
9393
}
9494
if (remain > 0 && accTimeout >= timeout) {
95-
throw new SocketTimeoutException("Timeout occurred, failed to read total " + readSize + " bytes in "
96-
+ timeout + " milliseconds, actual read only " + (readSize - remain)
97-
+ " bytes");
95+
throw new SocketTimeoutException(
96+
"Timeout occurred, failed to read total " + readSize + " bytes in " + timeout
97+
+ " milliseconds, actual read only " + (readSize - remain) + " bytes");
9898
}
9999
return data;
100100
}
@@ -137,9 +137,11 @@ public boolean isConnected() {
137137
}
138138
return false;
139139
}
140+
140141
public boolean isSsl() {
141142
return ssl;
142143
}
144+
143145
public Socket getSocket() {
144146
return socket;
145147
}

0 commit comments

Comments
 (0)