From 8c14727fbaafe69b1061406140de98d5a168e949 Mon Sep 17 00:00:00 2001 From: az Date: Tue, 14 Nov 2023 21:31:08 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=8A=A0=E5=AF=86=E8=BF=87?= =?UTF-8?q?=E7=A8=8B=E4=B8=AD=E7=9A=84=E9=80=9A=E9=81=93=E7=BC=96=E7=A0=81?= =?UTF-8?q?=E5=BC=82=E5=B8=B8=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../handler/ProxyMessageConnectHandler.java | 5 ++- .../handler/ProxyMessageSecureKeyHandler.java | 3 +- .../UdpProxyMessageConnectHandler.java | 3 ++ .../neutrinoproxy/client/util/ProxyUtil.java | 35 ++++++------------- .../core/ProxyMessageDecoder.java | 1 - .../core/ProxyMessageEncoder.java | 1 + 6 files changed, 19 insertions(+), 29 deletions(-) diff --git a/neutrino-proxy-client/src/main/java/org/dromara/neutrinoproxy/client/handler/ProxyMessageConnectHandler.java b/neutrino-proxy-client/src/main/java/org/dromara/neutrinoproxy/client/handler/ProxyMessageConnectHandler.java index 2bca8667..0e99d4e7 100644 --- a/neutrino-proxy-client/src/main/java/org/dromara/neutrinoproxy/client/handler/ProxyMessageConnectHandler.java +++ b/neutrino-proxy-client/src/main/java/org/dromara/neutrinoproxy/client/handler/ProxyMessageConnectHandler.java @@ -56,12 +56,15 @@ public class ProxyMessageConnectHandler implements ProxyMessageHandler { channel.attr(Constants.NEXT_CHANNEL).set(realServerChannel); realServerChannel.attr(Constants.NEXT_CHANNEL).set(channel); - // 远程绑定 + // 通知服务端进行远程绑定,此绑定信息不加密,该条消息为身份标识 channel.writeAndFlush(ProxyMessage.buildConnectMessage(visitorId + "@" + proxyConfig.getTunnel().getLicenseKey())); realServerChannel.config().setOption(ChannelOption.AUTO_READ, true); ProxyUtil.addRealServerChannel(visitorId, realServerChannel); ProxyUtil.setRealServerChannelVisitorId(realServerChannel, visitorId); + + // 连接信息发送后,将该通道设置为加密 + ProxyUtil.setChannelSecurity(channel); } @Override diff --git a/neutrino-proxy-client/src/main/java/org/dromara/neutrinoproxy/client/handler/ProxyMessageSecureKeyHandler.java b/neutrino-proxy-client/src/main/java/org/dromara/neutrinoproxy/client/handler/ProxyMessageSecureKeyHandler.java index 9b90f5cf..abd0a2f0 100644 --- a/neutrino-proxy-client/src/main/java/org/dromara/neutrinoproxy/client/handler/ProxyMessageSecureKeyHandler.java +++ b/neutrino-proxy-client/src/main/java/org/dromara/neutrinoproxy/client/handler/ProxyMessageSecureKeyHandler.java @@ -28,9 +28,8 @@ public class ProxyMessageSecureKeyHandler implements ProxyMessageHandler { Attribute booleanAttribute = ctx.attr(Constants.IS_SECURITY); booleanAttribute.set(true); - // 设置代理通道为安全,之后使用代理通道传输的消息均会加密 + // 全局存储密钥 ProxyUtil.setSecureKey(secureKey); - ProxyUtil.setProxyChannelSecurity(); log.info("Encrypted link established successfully"); } else { diff --git a/neutrino-proxy-client/src/main/java/org/dromara/neutrinoproxy/client/handler/UdpProxyMessageConnectHandler.java b/neutrino-proxy-client/src/main/java/org/dromara/neutrinoproxy/client/handler/UdpProxyMessageConnectHandler.java index bc0e9bb0..7ea495d4 100644 --- a/neutrino-proxy-client/src/main/java/org/dromara/neutrinoproxy/client/handler/UdpProxyMessageConnectHandler.java +++ b/neutrino-proxy-client/src/main/java/org/dromara/neutrinoproxy/client/handler/UdpProxyMessageConnectHandler.java @@ -46,6 +46,9 @@ public class UdpProxyMessageConnectHandler implements ProxyMessageHandler { .setTargetIp(udpBaseInfo.getTargetIp()) .setTargetPort(udpBaseInfo.getTargetPort()) ).setData(proxyConfig.getTunnel().getLicenseKey().getBytes())); + + // connect类型的消息不加密,用于标识身份,发送标识消息后,再将通道设置加密标识 + ProxyUtil.setChannelSecurity(channel); } @Override diff --git a/neutrino-proxy-client/src/main/java/org/dromara/neutrinoproxy/client/util/ProxyUtil.java b/neutrino-proxy-client/src/main/java/org/dromara/neutrinoproxy/client/util/ProxyUtil.java index c10a1b1d..f6776e8e 100644 --- a/neutrino-proxy-client/src/main/java/org/dromara/neutrinoproxy/client/util/ProxyUtil.java +++ b/neutrino-proxy-client/src/main/java/org/dromara/neutrinoproxy/client/util/ProxyUtil.java @@ -83,9 +83,7 @@ public class ProxyUtil { tcpProxyTunnelBootstrap.connect().addListener((ChannelFutureListener) future -> { if (future.isSuccess()) { - Channel newChannel = future.channel(); - setChannelSecurity(newChannel); - borrowListener.success(newChannel); + borrowListener.success(future.channel()); } else { borrowListener.error(future.cause()); } @@ -93,6 +91,10 @@ public class ProxyUtil { } public static void returnTcpProxyChanel(Channel proxyChanel) { + if (proxyChanel != null) { + proxyChanel.attr(Constants.IS_SECURITY).set(null); + proxyChanel.attr(Constants.SECURE_KEY).set(null); + } if (tcpProxyChannelPool.size() > MAX_POOL_SIZE) { proxyChanel.close(); } else { @@ -117,9 +119,7 @@ public class ProxyUtil { tcpProxyTunnelBootstrap.connect().addListener((ChannelFutureListener) future -> { if (future.isSuccess()) { - Channel newChannel = future.channel(); - setChannelSecurity(newChannel); - borrowListener.success(newChannel); + borrowListener.success(future.channel()); } else { borrowListener.error(future.cause()); } @@ -127,6 +127,10 @@ public class ProxyUtil { } public static void returnUdpProxyChanel(Channel proxyChanel) { + if (proxyChanel != null) { + proxyChanel.attr(Constants.IS_SECURITY).set(null); + proxyChanel.attr(Constants.SECURE_KEY).set(null); + } if (udpProxyChannelPool.size() > MAX_POOL_SIZE) { proxyChanel.close(); } else { @@ -241,23 +245,4 @@ public class ProxyUtil { channel.attr(Constants.SECURE_KEY).set(secureKey); } - /** - * 设置代理通道为安全 - */ - public static void setProxyChannelSecurity() { - if (null == secureKey) { - return; - } - tcpProxyChannelPool.forEach(channel -> { - channel.attr(Constants.IS_SECURITY).set(true); - channel.attr(Constants.SECURE_KEY).set(secureKey); - }); - - udpProxyChannelPool.forEach(channel -> { - channel.attr(Constants.IS_SECURITY).set(true); - channel.attr(Constants.SECURE_KEY).set(secureKey); - }); - - } - } diff --git a/neutrino-proxy-core/src/main/java/org/dromara/neutrinoproxy/core/ProxyMessageDecoder.java b/neutrino-proxy-core/src/main/java/org/dromara/neutrinoproxy/core/ProxyMessageDecoder.java index 4c57b08e..0c42c38b 100644 --- a/neutrino-proxy-core/src/main/java/org/dromara/neutrinoproxy/core/ProxyMessageDecoder.java +++ b/neutrino-proxy-core/src/main/java/org/dromara/neutrinoproxy/core/ProxyMessageDecoder.java @@ -111,7 +111,6 @@ public class ProxyMessageDecoder extends LengthFieldBasedFrameDecoder { long sn = buf.readLong(); proxyMessage.setSerialNumber(sn); - proxyMessage.setType(type); int infoLength = buf.readInt(); diff --git a/neutrino-proxy-core/src/main/java/org/dromara/neutrinoproxy/core/ProxyMessageEncoder.java b/neutrino-proxy-core/src/main/java/org/dromara/neutrinoproxy/core/ProxyMessageEncoder.java index c560ab15..fc7ae5be 100644 --- a/neutrino-proxy-core/src/main/java/org/dromara/neutrinoproxy/core/ProxyMessageEncoder.java +++ b/neutrino-proxy-core/src/main/java/org/dromara/neutrinoproxy/core/ProxyMessageEncoder.java @@ -22,6 +22,7 @@ package org.dromara.neutrinoproxy.core; +import cn.hutool.core.util.HexUtil; import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; import io.netty.channel.ChannelHandlerContext;