Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -33,21 +33,19 @@ public class NettyChannelFactory implements ManagedChannelFactory {

private final ClientInterceptor metadata;

private final boolean useTLS;
private final byte[] cert;
private final boolean retryEnabled;
private final boolean useDefaultGrpcResolver;
private final Long grpcKeepAliveTimeMillis;
private final List<Consumer<? super ManagedChannelBuilder<?>>> initializers;
private final SslContext sslCtx;

private NettyChannelFactory(GrpcTransportBuilder builder) {
this.metadata = YdbHeaders.createMetadataInterceptor(builder);
this.useTLS = builder.getUseTls();
this.cert = builder.getCert();
this.retryEnabled = builder.isEnableRetry();
this.useDefaultGrpcResolver = builder.useDefaultGrpcResolver();
this.grpcKeepAliveTimeMillis = builder.getGrpcKeepAliveTimeMillis();
this.initializers = builder.getChannelInitializers();
this.sslCtx = createSslContext(builder.getUseTls(), builder.getCert());
}

@SuppressWarnings("deprecation")
Expand All @@ -56,10 +54,10 @@ public ManagedChannel newManagedChannel(String host, int port, String sslHostOve
NettyChannelBuilder channelBuilder = NettyChannelBuilder
.forAddress(host, port);

if (useTLS) {
if (sslCtx != null) {
channelBuilder
.negotiationType(NegotiationType.TLS)
.sslContext(createSslContext());
.sslContext(sslCtx);
if (sslHostOverride != null) {
channelBuilder.overrideAuthority(sslHostOverride);
}
Expand Down Expand Up @@ -104,11 +102,15 @@ protected void configure(NettyChannelBuilder channelBuilder) {

}

private SslContext createSslContext() {
private static SslContext createSslContext(boolean useTLS, byte[] customCert) {
if (!useTLS) {
return null;
}

try {
SslContextBuilder sslContextBuilder = GrpcSslContexts.forClient();
if (cert != null) {
sslContextBuilder.trustManager(new ByteArrayInputStream(cert));
if (customCert != null) {
sslContextBuilder.trustManager(new ByteArrayInputStream(customCert));
} else {
sslContextBuilder.trustManager(new YandexTrustManagerFactory(""));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,21 +33,19 @@ public class ShadedNettyChannelFactory implements ManagedChannelFactory {

private final ClientInterceptor metadata;

private final boolean useTLS;
private final byte[] cert;
private final boolean retryEnabled;
private final boolean useDefaultGrpcResolver;
private final Long grpcKeepAliveTimeMillis;
private final List<Consumer<? super ManagedChannelBuilder<?>>> initializers;
private final SslContext sslCtx;

private ShadedNettyChannelFactory(GrpcTransportBuilder builder) {
this.metadata = YdbHeaders.createMetadataInterceptor(builder);
this.useTLS = builder.getUseTls();
this.cert = builder.getCert();
this.retryEnabled = builder.isEnableRetry();
this.useDefaultGrpcResolver = builder.useDefaultGrpcResolver();
this.grpcKeepAliveTimeMillis = builder.getGrpcKeepAliveTimeMillis();
this.initializers = builder.getChannelInitializers();
this.sslCtx = createSslContext(builder.getUseTls(), builder.getCert());
}

@SuppressWarnings("deprecation")
Expand All @@ -56,10 +54,10 @@ public ManagedChannel newManagedChannel(String host, int port, String sslHostOve
NettyChannelBuilder channelBuilder = NettyChannelBuilder
.forAddress(host, port);

if (useTLS) {
if (sslCtx != null) {
channelBuilder
.negotiationType(NegotiationType.TLS)
.sslContext(createSslContext());
.sslContext(sslCtx);
if (sslHostOverride != null) {
channelBuilder.overrideAuthority(sslHostOverride);
}
Expand Down Expand Up @@ -104,11 +102,15 @@ protected void configure(NettyChannelBuilder channelBuilder) {

}

private SslContext createSslContext() {
private static SslContext createSslContext(boolean useTLS, byte[] customCert) {
if (!useTLS) {
return null;
}

try {
SslContextBuilder sslContextBuilder = GrpcSslContexts.forClient();
if (cert != null) {
sslContextBuilder.trustManager(new ByteArrayInputStream(cert));
if (customCert != null) {
sslContextBuilder.trustManager(new ByteArrayInputStream(customCert));
} else {
sslContextBuilder.trustManager(new YandexTrustManagerFactory(""));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -244,10 +244,8 @@ public void invalidSslCert() {
GrpcTransportBuilder builder = GrpcTransport.forHost(MOCKED_HOST, MOCKED_PORT, "/Root")
.withSecureConnection(cert);

ManagedChannelFactory factory = ChannelFactoryLoader.load().buildFactory(builder);

RuntimeException ex = Assert.assertThrows(RuntimeException.class,
() -> factory.newManagedChannel(MOCKED_HOST, MOCKED_PORT, null));
() -> ChannelFactoryLoader.load().buildFactory(builder));

Assert.assertEquals("cannot create ssl context", ex.getMessage());
Assert.assertNotNull(ex.getCause());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -243,10 +243,8 @@ public void invalidSslCert() {
GrpcTransportBuilder builder = GrpcTransport.forHost(MOCKED_HOST, MOCKED_PORT, "/Root")
.withSecureConnection(cert);

ManagedChannelFactory factory = ChannelFactoryLoader.load().buildFactory(builder);

RuntimeException ex = Assert.assertThrows(RuntimeException.class,
() -> factory.newManagedChannel(MOCKED_HOST, MOCKED_PORT, null));
() -> ChannelFactoryLoader.load().buildFactory(builder));

Assert.assertEquals("cannot create ssl context", ex.getMessage());
Assert.assertNotNull(ex.getCause());
Expand Down
Loading