From f2005b3e741bd88d7728fa0c40977b5832a592a3 Mon Sep 17 00:00:00 2001 From: = <=> Date: Tue, 14 Nov 2023 17:04:10 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=8F=82=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../handler/ProxyMessageConnectHandler.java | 1 - .../handler/ProxyMessageSecureKeyHandler.java | 4 ++- .../neutrinoproxy/client/util/ProxyUtil.java | 30 +++++++++++++++++-- .../core/ProxyMessageDecoder.java | 2 -- .../handler/ProxyMessageConnectHandler.java | 2 +- .../handler/ProxyMessageSecureKeyHandler.java | 5 ---- .../neutrinoproxy/server/util/ProxyUtil.java | 26 +++++++--------- 7 files changed, 42 insertions(+), 28 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 9d88918e..2bca8667 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 @@ -62,7 +62,6 @@ public class ProxyMessageConnectHandler implements ProxyMessageHandler { 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 2c302a15..9b90f5cf 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 @@ -24,11 +24,13 @@ public class ProxyMessageSecureKeyHandler implements ProxyMessageHandler { byte[] decryptedData = EncryptUtil.decryptByAes(secureKey, data); String m = new String(decryptedData); if ("ok".equals(m)) { - // 设置当前链路为安全,之后使用该链路传输的消息均会加密 + // 设置当前cmd通道为安全,之后使用该通道传输的消息均会加密 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/util/ProxyUtil.java b/neutrino-proxy-client/src/main/java/org/dromara/neutrinoproxy/client/util/ProxyUtil.java index 22332a3a..c10a1b1d 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,7 +83,9 @@ public class ProxyUtil { tcpProxyTunnelBootstrap.connect().addListener((ChannelFutureListener) future -> { if (future.isSuccess()) { - borrowListener.success(future.channel()); + Channel newChannel = future.channel(); + setChannelSecurity(newChannel); + borrowListener.success(newChannel); } else { borrowListener.error(future.cause()); } @@ -115,7 +117,9 @@ public class ProxyUtil { tcpProxyTunnelBootstrap.connect().addListener((ChannelFutureListener) future -> { if (future.isSuccess()) { - borrowListener.success(future.channel()); + Channel newChannel = future.channel(); + setChannelSecurity(newChannel); + borrowListener.success(newChannel); } else { borrowListener.error(future.cause()); } @@ -230,8 +234,30 @@ public class ProxyUtil { } public static void setChannelSecurity(Channel channel) { + if (null == secureKey) { + return; + } channel.attr(Constants.IS_SECURITY).set(true); 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 654c10d5..4c57b08e 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 @@ -98,8 +98,6 @@ public class ProxyMessageDecoder extends LengthFieldBasedFrameDecoder { Attribute secureKeyAttr = ctx.attr(SECURE_KEY); byte[] secureKey = secureKeyAttr.get(); // 解密 - log.info("DecoderKey:{}", HexUtil.encodeHexStr(secureKey)); - log.info("DecoderBytes:{}", HexUtil.encodeHexStr(encryptedBytes)); byte[] decryptedData = EncryptUtil.decryptByAes(secureKey, encryptedBytes); buf = Unpooled.wrappedBuffer(decryptedData); diff --git a/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/proxy/handler/ProxyMessageConnectHandler.java b/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/proxy/handler/ProxyMessageConnectHandler.java index 16eb889a..3119075a 100644 --- a/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/proxy/handler/ProxyMessageConnectHandler.java +++ b/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/proxy/handler/ProxyMessageConnectHandler.java @@ -94,7 +94,7 @@ public class ProxyMessageConnectHandler implements ProxyMessageHandler { } // 设置加密 - ProxyUtil.setChannelSecurity(licenseDO.getId(), visitorChannel); + ProxyUtil.setChannelSecurity(licenseDO.getId(), ctx.channel()); } @Override diff --git a/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/proxy/handler/ProxyMessageSecureKeyHandler.java b/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/proxy/handler/ProxyMessageSecureKeyHandler.java index 4c7aa455..63cda1c6 100644 --- a/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/proxy/handler/ProxyMessageSecureKeyHandler.java +++ b/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/proxy/handler/ProxyMessageSecureKeyHandler.java @@ -66,11 +66,6 @@ public class ProxyMessageSecureKeyHandler implements ProxyMessageHandler { Integer licenseId = ctx.attr(Constants.LICENSE_ID).get(); ProxyUtil.setSecureKey(licenseId, secureKey); ProxyUtil.setChannelSecurity(licenseId, ctx.channel()); - Map channelMap = ProxyUtil.getVisitorChannels(ctx.channel()); - channelMap.values().forEach(channel -> ProxyUtil.setChannelSecurity(licenseId, channel)); - if (licenseId != null) { - ProxyUtil.setLicenseIdRelativeChannelSecurity(licenseId); - } } @Override diff --git a/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/util/ProxyUtil.java b/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/util/ProxyUtil.java index 7ae1d3b5..288394ac 100644 --- a/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/util/ProxyUtil.java +++ b/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/util/ProxyUtil.java @@ -38,15 +38,15 @@ public class ProxyUtil { /** * 服务端口 -> 指令通道映射 */ - private static Map serverPortToCmdChannelMap = new ConcurrentHashMap<>(); + private static final Map serverPortToCmdChannelMap = new ConcurrentHashMap<>(); /** * license -> 指令通道映射 */ - private static Map licenseToCmdChannelMap = new ConcurrentHashMap<>(); + private static final Map licenseToCmdChannelMap = new ConcurrentHashMap<>(); /** * 服务端口 -> 访问通道映射 */ - private static Map serverPortToVisitorChannel = new ConcurrentHashMap<>(); + private static final Map serverPortToVisitorChannel = new ConcurrentHashMap<>(); /** * cmdChannelAttachInfo.getUserChannelMap() 读写锁 @@ -55,21 +55,21 @@ public class ProxyUtil { /** * 访问者ID生成器 */ - private static AtomicLong visitorIdProducer = new AtomicLong(0); + private static final AtomicLong visitorIdProducer = new AtomicLong(0); /** * 代理 - connect附加映射 */ - private static Map proxyConnectAttachmentMap = new HashMap<>(); + private static final Map proxyConnectAttachmentMap = new HashMap<>(); /** * 子域名 - 服务端端口映射 */ - private static Map subdomainToServerPort = new HashMap<>(); + private static final Map subdomainToServerPort = new HashMap<>(); /** * licenseId - 客户端Id映射 */ - private static Map licenseIdToClientIdMap = new HashMap<>(); + private static final Map licenseIdToClientIdMap = new HashMap<>(); - private static Map licenseIdToSecureKeyMap = new ConcurrentHashMap<>(); + private static final Map licenseIdToSecureKeyMap = new ConcurrentHashMap<>(); /** * 初始化代理信息 @@ -146,9 +146,6 @@ public class ProxyUtil { cmdChannelAttachInfo.getServerPorts().addAll(serverPorts); } - // 添加安全信息 - setChannelSecurity(licenseId, cmdChannel); - licenseToCmdChannelMap.put(licenseId, cmdChannel); } @@ -431,13 +428,10 @@ public class ProxyUtil { licenseIdToSecureKeyMap.put(licenseId, key); } - public static void setLicenseIdRelativeChannelSecurity(Integer licenseId) { + public static void setLicenseIdRelativeProxyChannelSecurity(Integer licenseId) { Set portSet = licenseToServerPortMap.get(licenseId); for(Integer port : portSet) { - Channel cmdChannel = serverPortToCmdChannelMap.get(port); - setChannelSecurity(licenseId, cmdChannel); - Channel visitorChannel = serverPortToVisitorChannel.get(port); - setChannelSecurity(licenseId,visitorChannel); + // TODO 代理客户端 } }