Skip to content

Commit

Permalink
HDDS-7573. Use keyManager and trustManager provided by keyStoreFactor…
Browse files Browse the repository at this point in the history
…y in Ratis group (#4464)
  • Loading branch information
Galsza committed Mar 27, 2023
1 parent 5db6867 commit 01b7dc6
Show file tree
Hide file tree
Showing 8 changed files with 35 additions and 36 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@
import java.io.File;
import java.io.IOException;
import java.net.InetSocketAddress;
import java.security.cert.X509Certificate;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
Expand Down Expand Up @@ -58,10 +57,10 @@
import org.apache.hadoop.hdds.ratis.ContainerCommandRequestMessage;
import org.apache.hadoop.hdds.ratis.RatisHelper;
import org.apache.hadoop.hdds.scm.pipeline.PipelineID;
import org.apache.hadoop.hdds.security.ssl.KeyStoresFactory;
import org.apache.hadoop.hdds.security.x509.SecurityConfig;
import org.apache.hadoop.hdds.security.x509.certificate.client.CertificateClient;
import org.apache.hadoop.hdds.tracing.TracingUtil;
import org.apache.hadoop.hdds.utils.HAUtils;
import org.apache.hadoop.hdds.utils.HddsServerUtil;
import org.apache.hadoop.ozone.OzoneConfigKeys;
import org.apache.hadoop.ozone.OzoneConsts;
Expand Down Expand Up @@ -498,14 +497,14 @@ public static XceiverServerRatis newXceiverServerRatis(
private static Parameters createTlsParameters(SecurityConfig conf,
CertificateClient caClient) throws IOException {
if (conf.isSecurityEnabled() && conf.isGrpcTlsEnabled()) {
List<X509Certificate> caList = HAUtils.buildCAX509List(caClient,
conf.getConfiguration());
KeyStoresFactory managerFactory =
caClient.getServerKeyStoresFactory();
GrpcTlsConfig serverConfig = new GrpcTlsConfig(
caClient.getPrivateKey(), caClient.getCertificate(),
caList, true);
managerFactory.getKeyManagers()[0],
managerFactory.getTrustManagers()[0], true);
GrpcTlsConfig clientConfig = new GrpcTlsConfig(
caClient.getPrivateKey(), caClient.getCertificate(),
caList, false);
managerFactory.getKeyManagers()[0],
managerFactory.getTrustManagers()[0], false);
return RatisHelper.setServerTlsConf(serverConfig, clientConfig);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,6 @@
import org.apache.hadoop.hdds.security.token.TokenVerifier;
import org.apache.hadoop.hdds.security.x509.SecurityConfig;
import org.apache.hadoop.hdds.security.x509.certificate.client.CertificateClient;
import org.apache.hadoop.hdds.utils.HAUtils;
import org.apache.hadoop.hdds.utils.HddsServerUtil;
import org.apache.hadoop.ozone.container.common.helpers.ContainerMetrics;
import org.apache.hadoop.ozone.container.common.impl.ContainerSet;
Expand Down Expand Up @@ -66,7 +65,6 @@
import org.slf4j.LoggerFactory;

import java.io.IOException;
import java.security.cert.X509Certificate;
import java.time.Duration;
import java.util.ArrayList;
import java.util.Iterator;
Expand Down Expand Up @@ -251,11 +249,9 @@ public OzoneContainer(
containerSet);

if (certClient != null && secConf.isGrpcTlsEnabled()) {
List<X509Certificate> x509Certificates =
HAUtils.buildCAX509List(certClient, conf);
tlsClientConfig = new GrpcTlsConfig(
certClient.getPrivateKey(), certClient.getCertificate(),
x509Certificates, true);
certClient.getClientKeyStoresFactory().getKeyManagers()[0],
certClient.getClientKeyStoresFactory().getTrustManagers()[0], true);
} else {
tlsClientConfig = null;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
import org.apache.hadoop.hdds.protocolPB.SCMSecurityProtocolClientSideTranslatorPB;
import org.apache.hadoop.hdds.ratis.RatisHelper;
import org.apache.hadoop.hdds.scm.server.SCMStorageConfig;
import org.apache.hadoop.hdds.security.ssl.KeyStoresFactory;
import org.apache.hadoop.hdds.security.x509.SecurityConfig;
import org.apache.hadoop.hdds.security.x509.certificate.authority.CAType;
import org.apache.hadoop.hdds.security.x509.certificate.authority.CertificateServer;
Expand Down Expand Up @@ -306,16 +307,19 @@ private static void persistSubCACertificate(OzoneConfiguration config,

/**
* Create GrpcTlsConfig.
*
* @param conf
* @param certificateClient
* @return
*/
public static GrpcTlsConfig createSCMRatisTLSConfig(SecurityConfig conf,
CertificateClient certificateClient) {
CertificateClient certificateClient) throws IOException {
if (conf.isSecurityEnabled() && conf.isGrpcTlsEnabled()) {
return new GrpcTlsConfig(
certificateClient.getPrivateKey(), certificateClient.getCertificate(),
certificateClient.getCACertificate(), true);
KeyStoresFactory serverKeyFactory =
certificateClient.getServerKeyStoresFactory();

return new GrpcTlsConfig(serverKeyFactory.getKeyManagers()[0],
serverKeyFactory.getTrustManagers()[0], true);
}
return null;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
import org.apache.hadoop.hdds.protocol.scm.proto.InterSCMProtocolProtos.CopyDBCheckpointResponseProto;
import org.apache.hadoop.hdds.protocol.scm.proto.InterSCMProtocolServiceGrpc;
import org.apache.hadoop.hdds.scm.ScmConfigKeys;
import org.apache.hadoop.hdds.security.ssl.KeyStoresFactory;
import org.apache.hadoop.hdds.security.x509.SecurityConfig;
import org.apache.hadoop.hdds.security.x509.certificate.client.CertificateClient;
import org.apache.hadoop.ozone.OzoneConsts;
Expand Down Expand Up @@ -72,10 +73,11 @@ public InterSCMGrpcClient(final String host,
if (securityConfig.isSecurityEnabled()
&& securityConfig.isGrpcTlsEnabled()) {
SslContextBuilder sslClientContextBuilder = SslContextBuilder.forClient();
sslClientContextBuilder.keyManager(scmCertificateClient.getPrivateKey(),
scmCertificateClient.getCertificate());
KeyStoresFactory keyStoreFactory =
scmCertificateClient.getClientKeyStoresFactory();
sslClientContextBuilder.keyManager(keyStoreFactory.getKeyManagers()[0]);
sslClientContextBuilder.trustManager(
scmCertificateClient.getCACertificate());
keyStoreFactory.getTrustManagers()[0]);
SslContextBuilder sslContextBuilder = GrpcSslContexts.configure(
sslClientContextBuilder, securityConfig.getGrpcSslProvider());
channelBuilder.sslContext(sslContextBuilder.build())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
import org.apache.hadoop.hdds.scm.ScmConfigKeys;
import org.apache.hadoop.hdds.scm.server.StorageContainerManager;
import org.apache.hadoop.hdds.security.x509.SecurityConfig;
import org.apache.hadoop.hdds.security.x509.certificate.client.CertificateClient;
import org.apache.hadoop.ozone.OzoneConsts;
import org.apache.ratis.thirdparty.io.grpc.Server;
import org.apache.ratis.thirdparty.io.grpc.ServerBuilder;
Expand Down Expand Up @@ -64,10 +65,10 @@ public InterSCMGrpcProtocolService(final ConfigurationSource conf,
if (securityConfig.isSecurityEnabled()
&& securityConfig.isGrpcTlsEnabled()) {
try {
CertificateClient certClient = scm.getScmCertificateClient();
SslContextBuilder sslServerContextBuilder =
SslContextBuilder.forServer(
scm.getScmCertificateClient().getPrivateKey(),
scm.getScmCertificateClient().getCertificate());
certClient.getServerKeyStoresFactory().getKeyManagers()[0]);
SslContextBuilder sslContextBuilder = GrpcSslContexts.configure(
sslServerContextBuilder, securityConfig.getGrpcSslProvider());
nettyServerBuilder.sslContext(sslContextBuilder.build());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3089,8 +3089,9 @@ public void transferLeadership(String newLeaderId)
targetPeerId = RaftPeerId.valueOf(newLeaderId);
}

final GrpcTlsConfig tlsConfig = OzoneManagerRatisUtils.createTlsConfig(
secConfig, certClient, true);
final GrpcTlsConfig tlsConfig =
OzoneManagerRatisUtils.createServerTlsConfig(
secConfig, certClient, true);

RatisHelper.transferRatisLeadership(configuration, division.getGroup(),
targetPeerId, tlsConfig);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@
import static org.apache.hadoop.ipc.RpcConstants.DUMMY_CLIENT_ID;
import static org.apache.hadoop.ipc.RpcConstants.INVALID_CALL_ID;
import static org.apache.hadoop.ozone.om.OMConfigKeys.OZONE_OM_HA_PREFIX;
import static org.apache.hadoop.ozone.om.ratis.utils.OzoneManagerRatisUtils.createTlsConfig;
import static org.apache.hadoop.ozone.om.ratis.utils.OzoneManagerRatisUtils.createServerTlsConfig;

/**
* Creates a Ratis server endpoint for OM.
Expand Down Expand Up @@ -877,7 +877,7 @@ public RaftGroupId getRaftGroupId() {

private static Parameters createServerTlsParameters(SecurityConfig conf,
CertificateClient caClient) throws IOException {
GrpcTlsConfig config = createTlsConfig(conf, caClient, true);
GrpcTlsConfig config = createServerTlsConfig(conf, caClient, true);
return config == null ? null : RatisHelper.setServerTlsConf(config);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@

import org.apache.hadoop.hdds.conf.ConfigurationSource;
import org.apache.hadoop.hdds.conf.OzoneConfiguration;
import org.apache.hadoop.hdds.security.ssl.KeyStoresFactory;
import org.apache.hadoop.hdds.security.x509.SecurityConfig;
import org.apache.hadoop.hdds.security.x509.certificate.client.CertificateClient;
import org.apache.hadoop.hdds.server.ServerUtils;
Expand Down Expand Up @@ -96,8 +97,6 @@

import java.io.IOException;
import java.nio.file.Path;
import java.security.cert.X509Certificate;
import java.util.List;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
Expand Down Expand Up @@ -463,15 +462,12 @@ public static void checkLeaderStatus(OzoneManager ozoneManager)
}
}

public static GrpcTlsConfig createTlsConfig(SecurityConfig conf,
public static GrpcTlsConfig createServerTlsConfig(SecurityConfig conf,
CertificateClient caClient, boolean mutualTls) throws IOException {
if (conf.isSecurityEnabled() && conf.isGrpcTlsEnabled()) {
List<X509Certificate> caList = HAUtils.buildCAX509List(caClient,
conf.getConfiguration());
GrpcTlsConfig config = new GrpcTlsConfig(
caClient.getPrivateKey(), caClient.getCertificate(),
caList, mutualTls);
return config;
KeyStoresFactory serverKeyFactory = caClient.getServerKeyStoresFactory();
return new GrpcTlsConfig(serverKeyFactory.getKeyManagers()[0],
serverKeyFactory.getTrustManagers()[0], mutualTls);
}

return null;
Expand Down

0 comments on commit 01b7dc6

Please sign in to comment.