Skip to content

Commit debc8ab

Browse files
authored
HDDS-15176. Ozone SCM fails to start when gRPC cipher policy list includes unsupported cipher (#10192)
1 parent bc89991 commit debc8ab

5 files changed

Lines changed: 40 additions & 5 deletions

File tree

hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/transport/server/XceiverServerGrpc.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@
5858
import org.apache.ratis.thirdparty.io.netty.channel.nio.NioEventLoopGroup;
5959
import org.apache.ratis.thirdparty.io.netty.channel.socket.nio.NioServerSocketChannel;
6060
import org.apache.ratis.thirdparty.io.netty.handler.ssl.SslContextBuilder;
61+
import org.apache.ratis.thirdparty.io.netty.handler.ssl.SupportedCipherSuiteFilter;
6162
import org.slf4j.Logger;
6263
import org.slf4j.LoggerFactory;
6364

@@ -146,7 +147,9 @@ public XceiverServerGrpc(DatanodeDetails datanodeDetails,
146147
SslContextBuilder sslContextBuilder = GrpcSslContexts.configure(
147148
sslClientContextBuilder, secConf.getGrpcSslProvider());
148149
sslContextBuilder.protocols(secConf.getGrpcTlsProtocols());
149-
sslContextBuilder.ciphers(secConf.getGrpcTlsCiphers());
150+
sslContextBuilder.ciphers(
151+
secConf.getGrpcTlsCiphers(),
152+
SupportedCipherSuiteFilter.INSTANCE);
150153
nettyServerBuilder.sslContext(sslContextBuilder.build());
151154
} catch (Exception ex) {
152155
LOG.error("Unable to setup TLS for secure datanode GRPC endpoint.", ex);

hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/replication/ReplicationServer.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@
4444
import org.apache.ratis.thirdparty.io.grpc.netty.NettyServerBuilder;
4545
import org.apache.ratis.thirdparty.io.netty.handler.ssl.ClientAuth;
4646
import org.apache.ratis.thirdparty.io.netty.handler.ssl.SslContextBuilder;
47+
import org.apache.ratis.thirdparty.io.netty.handler.ssl.SupportedCipherSuiteFilter;
4748
import org.slf4j.Logger;
4849
import org.slf4j.LoggerFactory;
4950

@@ -121,7 +122,9 @@ public void init() {
121122
sslContextBuilder.clientAuth(ClientAuth.REQUIRE);
122123
sslContextBuilder.trustManager(caClient.getTrustManager());
123124
sslContextBuilder.protocols(secConf.getGrpcTlsProtocols());
124-
sslContextBuilder.ciphers(secConf.getGrpcTlsCiphers());
125+
sslContextBuilder.ciphers(
126+
secConf.getGrpcTlsCiphers(),
127+
SupportedCipherSuiteFilter.INSTANCE);
125128

126129
nettyServerBuilder.sslContext(sslContextBuilder.build());
127130
} catch (IOException ex) {

hadoop-hdds/framework/src/test/java/org/apache/hadoop/hdds/security/ssl/TestGrpcTlsConfig.java

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@
5151
import org.apache.ratis.thirdparty.io.netty.handler.ssl.ClientAuth;
5252
import org.apache.ratis.thirdparty.io.netty.handler.ssl.SslContextBuilder;
5353
import org.apache.ratis.thirdparty.io.netty.handler.ssl.SslProvider;
54+
import org.apache.ratis.thirdparty.io.netty.handler.ssl.SupportedCipherSuiteFilter;
5455
import org.junit.jupiter.api.BeforeEach;
5556
import org.junit.jupiter.api.Test;
5657

@@ -146,6 +147,26 @@ public void testDefaultConfigAcceptsConnection() throws Exception {
146147
}
147148
}
148149

150+
@Test
151+
public void testServerIgnoresUnsupportedConfiguredCiphers() throws Exception {
152+
Server server = null;
153+
ManagedChannel channel = null;
154+
try {
155+
String[] configuredCiphers = {
156+
"TLS_FAKE_CIPHER_SUITE",
157+
"TLS_AES_256_GCM_SHA384"
158+
};
159+
server = setupServer(new String[]{"TLSv1.3"}, configuredCiphers);
160+
server.start();
161+
channel = setupClient(server.getPort(), new String[]{"TLSv1.3"}, new String[]{"TLS_AES_256_GCM_SHA384"});
162+
XceiverClientProtocolServiceStub asyncStub = XceiverClientProtocolServiceGrpc.newStub(channel);
163+
ContainerCommandResponseProto response = sendRequest(asyncStub);
164+
assertEquals(SUCCESS, response.getResult());
165+
} finally {
166+
shutdown(channel, server);
167+
}
168+
}
169+
149170
private Server setupServer(String[] protocols, String[] ciphers)
150171
throws Exception {
151172
NettyServerBuilder nettyServerBuilder = NettyServerBuilder.forPort(0).addService(new GrpcService());
@@ -157,7 +178,9 @@ private Server setupServer(String[] protocols, String[] ciphers)
157178
sslContextBuilder.protocols(protocols);
158179
}
159180
if (ciphers != null) {
160-
sslContextBuilder.ciphers(Arrays.asList(ciphers));
181+
sslContextBuilder.ciphers(
182+
Arrays.asList(ciphers),
183+
SupportedCipherSuiteFilter.INSTANCE);
161184
}
162185
nettyServerBuilder.sslContext(sslContextBuilder.build());
163186
return nettyServerBuilder.build();

hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/InterSCMGrpcProtocolService.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
import org.apache.ratis.thirdparty.io.grpc.netty.NettyServerBuilder;
3636
import org.apache.ratis.thirdparty.io.netty.handler.ssl.ClientAuth;
3737
import org.apache.ratis.thirdparty.io.netty.handler.ssl.SslContextBuilder;
38+
import org.apache.ratis.thirdparty.io.netty.handler.ssl.SupportedCipherSuiteFilter;
3839
import org.slf4j.Logger;
3940
import org.slf4j.LoggerFactory;
4041

@@ -75,7 +76,9 @@ public class InterSCMGrpcProtocolService {
7576
sslServerContextBuilder, securityConfig.getGrpcSslProvider());
7677
sslContextBuilder.clientAuth(ClientAuth.REQUIRE);
7778
sslContextBuilder.protocols(securityConfig.getGrpcTlsProtocols());
78-
sslContextBuilder.ciphers(securityConfig.getGrpcTlsCiphers());
79+
sslContextBuilder.ciphers(
80+
securityConfig.getGrpcTlsCiphers(),
81+
SupportedCipherSuiteFilter.INSTANCE);
7982
nettyServerBuilder.sslContext(sslContextBuilder.build());
8083
} catch (Exception ex) {
8184
LOG.error("Unable to setup TLS for secure " +

hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/GrpcOzoneManagerServer.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
import io.netty.channel.socket.nio.NioServerSocketChannel;
3939
import io.netty.handler.ssl.SslContextBuilder;
4040
import io.netty.handler.ssl.SslProvider;
41+
import io.netty.handler.ssl.SupportedCipherSuiteFilter;
4142
import java.io.IOException;
4243
import java.util.OptionalInt;
4344
import java.util.concurrent.LinkedBlockingQueue;
@@ -165,7 +166,9 @@ public void init(OzoneManagerProtocolServerSideTranslatorPB omTranslator,
165166
SslProvider.valueOf(omServerConfig.get(HDDS_GRPC_TLS_PROVIDER,
166167
HDDS_GRPC_TLS_PROVIDER_DEFAULT)));
167168
sslContextBuilder.protocols(secConf.getGrpcTlsProtocols());
168-
sslContextBuilder.ciphers(secConf.getGrpcTlsCiphers());
169+
sslContextBuilder.ciphers(
170+
secConf.getGrpcTlsCiphers(),
171+
SupportedCipherSuiteFilter.INSTANCE);
169172
nettyServerBuilder.sslContext(sslContextBuilder.build());
170173
} catch (Exception ex) {
171174
LOG.error("Unable to setup TLS for secure Om S3g GRPC channel.", ex);

0 commit comments

Comments
 (0)