Skip to content

Commit cece8c3

Browse files
committed
refactor(proxy): 重构 TLS证书管理
- 将 TlsCertificateManager 实例化移至 ProxyStartup 类 - 更新 GrpcServer 和 RemotingProtocolServer 类以使用 TlsCertificateManager - 移除冗余的 TLS 证书管理相关测试用例 - 优化 TLS 上下文重载逻辑 Signed-off-by: Async <raisinata@foxmail.com>
1 parent be0df90 commit cece8c3

9 files changed

Lines changed: 27 additions & 483 deletions

File tree

proxy/src/main/java/org/apache/rocketmq/proxy/ProxyStartup.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,8 @@ public static void main(String[] args) {
8282
PROXY_START_AND_SHUTDOWN.appendStartAndShutdown(tlsCertificateManager);
8383

8484
// create grpcServer
85-
GrpcServer grpcServer = GrpcServerBuilder.newBuilder(executor, ConfigurationManager.getProxyConfig().getGrpcServerPort())
85+
GrpcServer grpcServer = GrpcServerBuilder.newBuilder(executor,
86+
ConfigurationManager.getProxyConfig().getGrpcServerPort(), tlsCertificateManager)
8687
.addService(createServiceProcessor(messagingProcessor))
8788
.addService(ChannelzService.newInstance(100))
8889
.addService(ProtoReflectionService.newInstance())
@@ -91,7 +92,7 @@ public static void main(String[] args) {
9192
.build();
9293
PROXY_START_AND_SHUTDOWN.appendStartAndShutdown(grpcServer);
9394

94-
RemotingProtocolServer remotingServer = new RemotingProtocolServer(messagingProcessor);
95+
RemotingProtocolServer remotingServer = new RemotingProtocolServer(messagingProcessor, tlsCertificateManager);
9596
PROXY_START_AND_SHUTDOWN.appendStartAndShutdown(remotingServer);
9697

9798
// start servers one by one.

proxy/src/main/java/org/apache/rocketmq/proxy/grpc/GrpcServer.java

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -38,33 +38,35 @@ public class GrpcServer implements StartAndShutdown {
3838

3939
private final TimeUnit unit;
4040

41-
final GrpcTlsReloadHandler tlsReloadHandler;
41+
private final TlsCertificateManager tlsCertificateManager;
42+
@VisibleForTesting final GrpcTlsReloadHandler tlsReloadHandler;
4243

43-
protected GrpcServer(Server server, long timeout, TimeUnit unit) throws Exception {
44+
protected GrpcServer(Server server, long timeout, TimeUnit unit, TlsCertificateManager tlsCertificateManager) throws Exception {
4445
this.server = server;
4546
this.timeout = timeout;
4647
this.unit = unit;
47-
48+
this.tlsCertificateManager = tlsCertificateManager;
4849
this.tlsReloadHandler = new GrpcTlsReloadHandler();
49-
50-
// Register the TLS context reload handler
51-
TlsCertificateManager.getInstance().registerReloadListener(this.tlsReloadHandler);
5250
}
5351

5452
public void start() throws Exception {
53+
// Register the TLS context reload handler
54+
tlsCertificateManager.registerReloadListener(this.tlsReloadHandler);
55+
5556
this.server.start();
5657
log.info("grpc server start successfully.");
5758
}
5859

5960
public void shutdown() {
6061
try {
6162
// Unregister the TLS context reload handler
62-
TlsCertificateManager.getInstance().unregisterReloadListener(this.tlsReloadHandler);
63+
tlsCertificateManager.unregisterReloadListener(this.tlsReloadHandler);
6364

6465
this.server.shutdown().awaitTermination(timeout, unit);
6566

6667
log.info("grpc server shutdown successfully.");
6768
} catch (Exception e) {
69+
e.printStackTrace();
6870
log.error("Failed to shutdown grpc server", e);
6971
}
7072
}

proxy/src/main/java/org/apache/rocketmq/proxy/grpc/GrpcServerBuilder.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,12 +44,14 @@ public class GrpcServerBuilder {
4444

4545
protected TimeUnit unit = TimeUnit.SECONDS;
4646

47+
protected TlsCertificateManager tlsCertificateManager;
48+
4749
public static GrpcServerBuilder newBuilder(ThreadPoolExecutor executor, int port, TlsCertificateManager tlsCertificateManager) {
4850
return new GrpcServerBuilder(executor, port, tlsCertificateManager);
4951
}
5052

5153
protected GrpcServerBuilder(ThreadPoolExecutor executor, int port, TlsCertificateManager tlsCertificateManager) {
52-
// tlsCertificateManager.registerReloadListener();
54+
this.tlsCertificateManager = tlsCertificateManager;
5355
serverBuilder = NettyServerBuilder.forPort(port);
5456

5557
serverBuilder.protocolNegotiator(new ProxyAndTlsProtocolNegotiator());
@@ -101,7 +103,7 @@ public GrpcServerBuilder appendInterceptor(ServerInterceptor interceptor) {
101103
}
102104

103105
public GrpcServer build() throws Exception {
104-
return new GrpcServer(this.serverBuilder.build(), time, unit);
106+
return new GrpcServer(this.serverBuilder.build(), time, unit, tlsCertificateManager);
105107
}
106108

107109
public GrpcServerBuilder configInterceptor() {

proxy/src/main/java/org/apache/rocketmq/proxy/remoting/MultiProtocolRemotingServer.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ public void loadSslContext() {
6868
if (tlsMode != TlsMode.DISABLED) {
6969
try {
7070
sslContext = MultiProtocolTlsHelper.buildSslContext();
71-
log.info("SSLContext created for remoting server");
71+
log.info("SSLContext created for multi protocol remoting server");
7272
} catch (CertificateException | IOException e) {
7373
throw new ProxyException(ProxyExceptionCode.INTERNAL_SERVER_ERROR, "Failed to create SSLContext for server", e);
7474
}

proxy/src/main/java/org/apache/rocketmq/proxy/remoting/MultiProtocolTlsHelper.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,12 +61,12 @@ public static SslContext buildSslContext() throws IOException, CertificateExcept
6161
log.info("Using JDK SSL provider");
6262
}
6363

64-
SslContextBuilder sslContextBuilder = null;
64+
SslContextBuilder sslContextBuilder;
6565
if (tlsTestModeEnable) {
6666
SelfSignedCertificate selfSignedCertificate = new SelfSignedCertificate();
6767
sslContextBuilder = SslContextBuilder
6868
.forServer(selfSignedCertificate.certificate(), selfSignedCertificate.privateKey())
69-
.sslProvider(SslProvider.OPENSSL)
69+
.sslProvider(provider)
7070
.clientAuth(ClientAuth.OPTIONAL);
7171
} else {
7272
sslContextBuilder = SslContextBuilder.forServer(

proxy/src/main/java/org/apache/rocketmq/proxy/remoting/RemotingProtocolServer.java

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -89,10 +89,11 @@ public class RemotingProtocolServer implements StartAndShutdown, RemotingProxyOu
8989
protected final ThreadPoolExecutor topicRouteExecutor;
9090
protected final ThreadPoolExecutor defaultExecutor;
9191
protected final ScheduledExecutorService timerExecutor;
92+
protected final TlsCertificateManager tlsCertificateManager;
9293
protected final RemotingTlsReloadHandler tlsReloadHandler;
9394

9495

95-
public RemotingProtocolServer(MessagingProcessor messagingProcessor) throws Exception {
96+
public RemotingProtocolServer(MessagingProcessor messagingProcessor, TlsCertificateManager tlsCertificateManager) throws Exception {
9697
this.messagingProcessor = messagingProcessor;
9798
this.remotingChannelManager = new RemotingChannelManager(this, messagingProcessor.getProxyRelayService());
9899

@@ -117,6 +118,8 @@ public RemotingProtocolServer(MessagingProcessor messagingProcessor) throws Exce
117118
System.setProperty(TlsSystemConfig.TLS_SERVER_CERTPATH, config.getTlsCertPath());
118119
TlsSystemConfig.tlsServerKeyPath = config.getTlsKeyPath();
119120
System.setProperty(TlsSystemConfig.TLS_SERVER_KEYPATH, config.getTlsKeyPath());
121+
this.tlsCertificateManager = tlsCertificateManager;
122+
this.tlsReloadHandler = new RemotingTlsReloadHandler();
120123

121124
this.clientHousekeepingService = new ClientHousekeepingService(this.clientManagerActivity);
122125

@@ -191,9 +194,6 @@ public RemotingProtocolServer(MessagingProcessor messagingProcessor) throws Exce
191194
);
192195
this.timerExecutor.scheduleAtFixedRate(this::cleanExpireRequest, 10, 10, TimeUnit.SECONDS);
193196

194-
this.tlsReloadHandler = new RemotingTlsReloadHandler();
195-
TlsCertificateManager.getInstance().registerReloadListener(this.tlsReloadHandler);
196-
197197
this.registerRemotingServer(this.defaultRemotingServer);
198198
}
199199

@@ -243,7 +243,7 @@ protected void registerRemotingServer(RemotingServer remotingServer) {
243243
@Override
244244
public void shutdown() throws Exception {
245245
// Unregister the TLS context reload handler
246-
TlsCertificateManager.getInstance().unregisterReloadListener(this.tlsReloadHandler);
246+
tlsCertificateManager.unregisterReloadListener(this.tlsReloadHandler);
247247

248248
this.defaultRemotingServer.shutdown();
249249
this.remotingChannelManager.shutdown();
@@ -257,6 +257,9 @@ public void shutdown() throws Exception {
257257

258258
@Override
259259
public void start() throws Exception {
260+
// Register the TLS context reload handler
261+
tlsCertificateManager.registerReloadListener(this.tlsReloadHandler);
262+
260263
this.remotingChannelManager.start();
261264
this.defaultRemotingServer.start();
262265
}

proxy/src/test/java/org/apache/rocketmq/proxy/grpc/GrpcServerTest.java

Lines changed: 0 additions & 206 deletions
This file was deleted.

0 commit comments

Comments
 (0)