Skip to content

Commit 0952e4e

Browse files
committed
[pinpoint-apm#9882] Extract Grpc SSL Module
1 parent fd1d2de commit 0952e4e

File tree

6 files changed

+81
-34
lines changed

6 files changed

+81
-34
lines changed

grpc/src/main/java/com/navercorp/pinpoint/grpc/client/ChannelFactoryBuilder.java

+4-1
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,9 @@
1818

1919
import com.navercorp.pinpoint.grpc.client.config.ClientOption;
2020
import com.navercorp.pinpoint.grpc.client.config.SslOption;
21-
2221
import io.grpc.ClientInterceptor;
2322
import io.grpc.NameResolverProvider;
23+
import io.netty.handler.ssl.SslContext;
2424

2525

2626
/**
@@ -39,8 +39,11 @@ public interface ChannelFactoryBuilder {
3939

4040
void setClientOption(ClientOption clientOption);
4141

42+
@Deprecated
4243
void setSslOption(SslOption sslOption);
4344

45+
void setSslContext(SslContext sslContext);
46+
4447
void setNameResolverProvider(NameResolverProvider nameResolverProvider);
4548

4649
ChannelFactory build();

grpc/src/main/java/com/navercorp/pinpoint/grpc/client/DefaultChannelFactory.java

+6-14
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,6 @@
2020
import com.navercorp.pinpoint.grpc.ChannelTypeEnum;
2121
import com.navercorp.pinpoint.grpc.ExecutorUtils;
2222
import com.navercorp.pinpoint.grpc.client.config.ClientOption;
23-
import com.navercorp.pinpoint.grpc.security.SslClientConfig;
24-
import com.navercorp.pinpoint.grpc.security.SslContextFactory;
2523
import io.grpc.ClientInterceptor;
2624
import io.grpc.ManagedChannel;
2725
import io.grpc.Metadata;
@@ -39,7 +37,6 @@
3937
import org.apache.logging.log4j.LogManager;
4038
import org.apache.logging.log4j.Logger;
4139

42-
import javax.net.ssl.SSLException;
4340
import java.util.ArrayList;
4441
import java.util.List;
4542
import java.util.Objects;
@@ -63,7 +60,8 @@ public class DefaultChannelFactory implements ChannelFactory {
6360
private final HeaderFactory headerFactory;
6461

6562
private final ClientOption clientOption;
66-
private final SslClientConfig sslClientConfig;
63+
// private final SslClientConfig sslClientConfig;
64+
private final SslContext sslContext;
6765

6866
private final List<ClientInterceptor> clientInterceptorList;
6967
private final NameResolverProvider nameResolverProvider;
@@ -79,15 +77,15 @@ public class DefaultChannelFactory implements ChannelFactory {
7977
HeaderFactory headerFactory,
8078
NameResolverProvider nameResolverProvider,
8179
ClientOption clientOption,
82-
SslClientConfig sslClientConfig,
83-
List<ClientInterceptor> clientInterceptorList) {
80+
List<ClientInterceptor> clientInterceptorList,
81+
SslContext sslContext) {
8482
this.factoryName = Objects.requireNonNull(factoryName, "factoryName");
8583
this.executorQueueSize = executorQueueSize;
8684
this.headerFactory = Objects.requireNonNull(headerFactory, "headerFactory");
8785
// @Nullable
8886
this.nameResolverProvider = nameResolverProvider;
8987
this.clientOption = Objects.requireNonNull(clientOption, "clientOption");
90-
this.sslClientConfig = Objects.requireNonNull(sslClientConfig, "sslClientConfig");
88+
this.sslContext = sslContext;
9189

9290
Objects.requireNonNull(clientInterceptorList, "clientInterceptorList");
9391
this.clientInterceptorList = new ArrayList<>(clientInterceptorList);
@@ -151,13 +149,7 @@ public ManagedChannel build(String channelName, String host, int port) {
151149
}
152150
setupClientOption(channelBuilder);
153151

154-
if (sslClientConfig.isEnable()) {
155-
SslContext sslContext = null;
156-
try {
157-
sslContext = SslContextFactory.create(sslClientConfig);
158-
} catch (SSLException e) {
159-
throw new SecurityException(e);
160-
}
152+
if (sslContext != null) {
161153
channelBuilder.sslContext(sslContext);
162154
channelBuilder.negotiationType(NegotiationType.TLS);
163155
}

grpc/src/main/java/com/navercorp/pinpoint/grpc/client/DefaultChannelFactoryBuilder.java

+10-13
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,11 @@
1919
import com.navercorp.pinpoint.common.util.Assert;
2020
import com.navercorp.pinpoint.grpc.client.config.ClientOption;
2121
import com.navercorp.pinpoint.grpc.client.config.SslOption;
22-
import com.navercorp.pinpoint.grpc.security.SslClientConfig;
23-
import com.navercorp.pinpoint.grpc.util.Resource;
24-
2522
import io.grpc.ClientInterceptor;
2623
import io.grpc.NameResolverProvider;
27-
import org.apache.logging.log4j.Logger;
24+
import io.netty.handler.ssl.SslContext;
2825
import org.apache.logging.log4j.LogManager;
26+
import org.apache.logging.log4j.Logger;
2927

3028
import java.util.LinkedList;
3129
import java.util.Objects;
@@ -43,7 +41,8 @@ public class DefaultChannelFactoryBuilder implements ChannelFactoryBuilder {
4341
private HeaderFactory headerFactory;
4442

4543
private ClientOption clientOption;
46-
private SslOption sslOption;
44+
45+
private SslContext sslContext;
4746

4847
private final LinkedList<ClientInterceptor> clientInterceptorList = new LinkedList<>();
4948
private NameResolverProvider nameResolverProvider;
@@ -86,6 +85,11 @@ public void setSslOption(SslOption sslOption) {
8685
this.sslOption = sslOption;
8786
}
8887

88+
@Override
89+
public void setSslContext(SslContext sslContext) {
90+
this.sslContext = sslContext;
91+
}
92+
8993
@Override
9094
public void setNameResolverProvider(NameResolverProvider nameResolverProvider) {
9195
this.nameResolverProvider = Objects.requireNonNull(nameResolverProvider, "nameResolverProvider");
@@ -97,15 +101,8 @@ public ChannelFactory build() {
97101
Objects.requireNonNull(headerFactory, "headerFactory");
98102
Objects.requireNonNull(clientOption, "clientOption");
99103

100-
SslClientConfig sslClientConfig = SslClientConfig.DISABLED_CONFIG;
101-
if (sslOption != null && sslOption.isEnable()) {
102-
String providerType = sslOption.getProviderType();
103-
Resource trustCertResource = sslOption.getTrustCertResource();
104-
sslClientConfig = new SslClientConfig(true, providerType, trustCertResource);
105-
}
106-
107104
return new DefaultChannelFactory(factoryName, executorQueueSize,
108105
headerFactory, nameResolverProvider,
109-
clientOption, sslClientConfig, clientInterceptorList);
106+
clientOption, clientInterceptorList, sslContext);
110107
}
111108
}

profiler/src/main/java/com/navercorp/pinpoint/profiler/context/provider/grpc/AgentGrpcDataSenderProvider.java

+9-5
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@
2525
import com.navercorp.pinpoint.grpc.client.HeaderFactory;
2626
import com.navercorp.pinpoint.grpc.client.UnaryCallDeadlineInterceptor;
2727
import com.navercorp.pinpoint.grpc.client.config.ClientOption;
28-
import com.navercorp.pinpoint.grpc.client.config.SslOption;
2928
import com.navercorp.pinpoint.profiler.context.active.ActiveTraceRepository;
3029
import com.navercorp.pinpoint.profiler.context.grpc.config.GrpcTransportConfig;
3130
import com.navercorp.pinpoint.profiler.context.module.AgentDataSender;
@@ -43,8 +42,9 @@
4342
import com.navercorp.pinpoint.profiler.sender.grpc.ReconnectExecutor;
4443
import io.grpc.ClientInterceptor;
4544
import io.grpc.NameResolverProvider;
46-
import org.apache.logging.log4j.Logger;
45+
import io.netty.handler.ssl.SslContext;
4746
import org.apache.logging.log4j.LogManager;
47+
import org.apache.logging.log4j.Logger;
4848

4949
import java.util.List;
5050
import java.util.Objects;
@@ -69,6 +69,7 @@ public class AgentGrpcDataSenderProvider implements Provider<EnhancedDataSender<
6969
private final ActiveTraceRepository activeTraceRepository;
7070

7171
private List<ClientInterceptor> clientInterceptorList;
72+
private final Provider<SslContext> sslContextProvider;
7273

7374
@Inject
7475
public AgentGrpcDataSenderProvider(GrpcTransportConfig grpcTransportConfig,
@@ -77,7 +78,8 @@ public AgentGrpcDataSenderProvider(GrpcTransportConfig grpcTransportConfig,
7778
Provider<ReconnectExecutor> reconnectExecutor,
7879
ScheduledExecutorService retransmissionExecutor,
7980
NameResolverProvider nameResolverProvider,
80-
ActiveTraceRepository activeTraceRepository) {
81+
ActiveTraceRepository activeTraceRepository,
82+
Provider<SslContext> sslContextProvider) {
8183
this.grpcTransportConfig = Objects.requireNonNull(grpcTransportConfig, "grpcTransportConfig");
8284
this.messageConverter = Objects.requireNonNull(messageConverter, "messageConverter");
8385
this.headerFactory = Objects.requireNonNull(headerFactory, "headerFactory");
@@ -88,6 +90,8 @@ public AgentGrpcDataSenderProvider(GrpcTransportConfig grpcTransportConfig,
8890

8991
this.nameResolverProvider = Objects.requireNonNull(nameResolverProvider, "nameResolverProvider");
9092
this.activeTraceRepository = Objects.requireNonNull(activeTraceRepository, "activeTraceRepository");
93+
94+
this.sslContextProvider = Objects.requireNonNull(sslContextProvider, "sslContextProvider");
9195
}
9296

9397
@Inject(optional = true)
@@ -141,8 +145,8 @@ ChannelFactoryBuilder newChannelFactoryBuilder(boolean sslEnable) {
141145
channelFactoryBuilder.setClientOption(clientOption);
142146

143147
if (sslEnable) {
144-
SslOption sslOption = grpcTransportConfig.getSslOption();
145-
channelFactoryBuilder.setSslOption(sslOption);
148+
SslContext sslContext = sslContextProvider.get();
149+
channelFactoryBuilder.setSslContext(sslContext);
146150
}
147151

148152
return channelFactoryBuilder;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
package com.navercorp.pinpoint.profiler.context.provider.grpc;
2+
3+
import com.google.inject.Inject;
4+
import com.google.inject.Provider;
5+
import com.navercorp.pinpoint.exception.PinpointException;
6+
import com.navercorp.pinpoint.grpc.client.config.SslOption;
7+
import com.navercorp.pinpoint.grpc.security.SslClientConfig;
8+
import com.navercorp.pinpoint.grpc.security.SslContextFactory;
9+
import com.navercorp.pinpoint.grpc.util.Resource;
10+
import com.navercorp.pinpoint.profiler.context.grpc.config.GrpcTransportConfig;
11+
import io.netty.handler.ssl.SslContext;
12+
13+
import javax.net.ssl.SSLException;
14+
import java.util.Objects;
15+
16+
/**
17+
* @author Woonduk Kang(emeroad)
18+
*/
19+
public class SSLContextProvider implements Provider<SslContext> {
20+
21+
private final GrpcTransportConfig grpcTransportConfig;
22+
23+
@Inject
24+
public SSLContextProvider(GrpcTransportConfig grpcTransportConfig) {
25+
this.grpcTransportConfig = Objects.requireNonNull(grpcTransportConfig, "grpcTransportConfig");
26+
}
27+
28+
@Override
29+
public SslContext get() {
30+
try {
31+
SslOption sslOption = grpcTransportConfig.getSslOption();
32+
33+
String providerType = sslOption.getProviderType();
34+
Resource trustCertResource = sslOption.getTrustCertResource();
35+
36+
SslClientConfig sslClientConfig = new SslClientConfig(true, providerType, trustCertResource);
37+
38+
return SslContextFactory.create(sslClientConfig);
39+
} catch (SSLException e) {
40+
throw new PinpointException(e);
41+
}
42+
}
43+
}

profiler/src/main/java/com/navercorp/pinpoint/profiler/context/provider/grpc/SpanGrpcDataSenderProvider.java

+9-1
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@
4343
import com.navercorp.pinpoint.profiler.sender.grpc.metric.DefaultChannelzReporter;
4444
import io.grpc.ClientInterceptor;
4545
import io.grpc.NameResolverProvider;
46+
import io.netty.handler.ssl.SslContext;
4647
import org.apache.logging.log4j.LogManager;
4748
import org.apache.logging.log4j.Logger;
4849

@@ -64,6 +65,7 @@ public class SpanGrpcDataSenderProvider implements Provider<DataSender<SpanType>
6465
private final ChannelzScheduledReporter reporter;
6566

6667
private List<ClientInterceptor> clientInterceptorList;
68+
private final Provider<SslContext> sslContextProvider;
6769

6870
public static final String SPAN_CHANNELZ = "com.navercorp.pinpoint.metric.SpanChannel";
6971

@@ -72,7 +74,9 @@ public SpanGrpcDataSenderProvider(GrpcTransportConfig grpcTransportConfig,
7274
@SpanDataSender MessageConverter<SpanType, GeneratedMessageV3> messageConverter,
7375
HeaderFactory headerFactory,
7476
Provider<ReconnectExecutor> reconnectExecutor,
75-
NameResolverProvider nameResolverProvider, ChannelzScheduledReporter reporter) {
77+
NameResolverProvider nameResolverProvider,
78+
ChannelzScheduledReporter reporter,
79+
Provider<SslContext> sslContextProvider) {
7680
this.grpcTransportConfig = Objects.requireNonNull(grpcTransportConfig, "grpcTransportConfig");
7781
this.messageConverter = Objects.requireNonNull(messageConverter, "messageConverter");
7882
this.headerFactory = Objects.requireNonNull(headerFactory, "headerFactory");
@@ -81,6 +85,7 @@ public SpanGrpcDataSenderProvider(GrpcTransportConfig grpcTransportConfig,
8185

8286
this.nameResolverProvider = Objects.requireNonNull(nameResolverProvider, "nameResolverProvider");
8387
this.reporter = Objects.requireNonNull(reporter, "reporter");
88+
this.sslContextProvider = Objects.requireNonNull(sslContextProvider, "sslContextProvider");
8489
}
8590

8691
@Inject(optional = true)
@@ -145,6 +150,9 @@ private ChannelFactoryBuilder newChannelFactoryBuilder(boolean sslEnable) {
145150
if (sslEnable) {
146151
SslOption sslOption = grpcTransportConfig.getSslOption();
147152
channelFactoryBuilder.setSslOption(sslOption);
153+
154+
SslContext sslContext = sslContextProvider.get();
155+
channelFactoryBuilder.setSslContext(sslContext);
148156
}
149157

150158
return channelFactoryBuilder;

0 commit comments

Comments
 (0)