I am using NettyChannelBuilder in grpc client and NettyServerBuilder in 
grpc server.

I have created NettyServerBuilder with sslcontext with TLS1.3 and started 
the server as below
import io.grpc.ServerCredentials;
import io.grpc.TlsServerCredentials;
import io.grpc.netty.shaded.io.netty.handler.ssl.SslContext;
import io.grpc.netty.shaded.io.netty.handler.ssl.SslContextBuilder;
import io.grpc.util.AdvancedTlsX509TrustManager;
import io.grpc.Server;
import io.grpc.netty.shaded.io.grpc.netty.NettyServerBuilder;
import io.grpc.netty.shaded.io.netty.handler.ssl.SslContext;
import io.grpc.stub.StreamObserver;

        private Server myServer;
        CertificateData grpcCertificateData = CertificateData.SERVER_CERT;
        try {
            KeyManager serverKeyManager = 
myCertificateHandlerService.getServerKeyManagers(grpcCertificateData.getServiceGroup())[0];
            LOG.info("Retrieved key manager: {}", serverKeyManager);

            X509TrustManager trustManager =
                    (X509TrustManager) 
myCertificateHandlerService.getServerTrustManagers(grpcCertificateData.getServiceGroup())[0];
            X509Certificate[] acceptedIssuers = 
trustManager.getAcceptedIssuers();
            LOG.info("Retrieved CA certificates: {}", acceptedIssuers);

            SslContextBuilder builder = 
SslContextBuilder.forServer(serverKeyManager)
                    .trustManager(trustManager)
                    .clientAuth(ClientAuth.REQUIRE)
                    .ciphers(CIPHER_SUITES_SUPPORTED)
                    .protocols(TLS_VERSION_1_3);  // Explicitly set TLSv1.3
                    .sslProvider(SslProvider.JDK);

            NettyServerBuilder.forPort(PORT)
                        
.sslContext(GrpcSslContexts.configure(builder).build())
                        .addService(new LoadReportingRpcService());
myServer = serverBuilder.directExecutor().build();
            myServer.start();

        }
        catch (Exception e) {
            LimitedLogger.logOrSuppressError(LOG, LOG_MESSAGE_DATA, "Failed 
to build SSL context {}", e);
        }





Also I have created NettyChannelBuilder with sslContext with TLS1.3 and 
invoked rpc method in grpc server as below
 
 import io.grpc.LoadBalancerRegistry;
import io.grpc.ManagedChannel;
import io.grpc.ManagedChannelBuilder;
import io.grpc.NameResolverRegistry;
import io.grpc.StatusRuntimeException;
import io.grpc.internal.DnsNameResolverProvider;
import io.grpc.internal.PickFirstLoadBalancerProvider;
import io.grpc.netty.shaded.io.grpc.netty.NettyChannelBuilder;
import io.grpc.netty.shaded.io.netty.handler.ssl.SslContext;
import io.grpc.stub.StreamObserver;


   String serviceGroup = CertificateData.CERT_CLIENT.getServiceGroup();
        try
        {
            TrustManager[] caTrustManagers = 
myCertificateHandlerService.getServerTrustManagers(serviceGroup);
            KeyManager[] clientKeyManagers = 
myCertificateHandlerService.getClientKeyManagers(serviceGroup);
            if (caTrustManagers == null || clientKeyManagers == null)
            {
                LOG.error("NN Failed to retrieve PKI components. Server 
trust manager was {}, client key manager was {}, for service group {}",
                        caTrustManagers,
                        clientKeyManagers,
                        serviceGroup);
            }
            else
            {
                LOG.error("NN Configure TLS1.3 client");
                X509TrustManager caTrustManager = (X509TrustManager) 
caTrustManagers[0];
                KeyManager keyManager = clientKeyManagers[0];
                SslContextBuilder sslContextBuilder = 
SslContextBuilder.forClient()
                        .trustManager(caTrustManager)
                        .keyManager(keyManager)
                        .protocols(TLS_VERSION_1_3);
                        .sslProvider(SslProvider.JDK)
                        .ciphers(CIPHER_SUITES_SUPPORTED);
ManagedChannelBuilder<?> channelBuilder = 
NettyChannelBuilder.forAddress(target, GRPC_PORT);
                channelBuilder.directExecutor();
                LOG.error("NN tls enabled {}", isTlsEnabled());
                if (isTlsEnabled())
                {
                   LOG.error("NN tls enabled and start secure grpc client");
                   ((NettyChannelBuilder) 
channelBuilder).sslContext(GrpcSslContexts.configure(sslContextBuilder).build())).useTransportSecurity();
                }
    foundChannel = channelBuilder.build();
                ReportingServiceGrpc.ReportingServiceStub stub = 
ReportingServiceGrpc.newStub(foundChannel);
stub.invokeRpcMethod();
            }
        }
        catch (Exception e)
        {
            LOG.error("Failed to create ssl context for {}", serviceGroup, 
e);
        }

 
I


I was using below TLS1.3 ciphers in both server and client
 private static final Iterable<String> CIPHER_SUITES_SUPPORTED =
            Arrays.asList("TLS_AES_256_GCM_SHA384", 
"TLS_AES_128_GCM_SHA256",
                    "TLS_CHACHA20_POLY1305_SHA256");


But observed that TLS1.2 connection is established always from client to 
server communication. Here i have configured with TLS1.3 in sslcontext in 
both client and server and i am using java 11. It should establish TLS1.3 
right?

is it a bug in GRPC?   Otherwise please clarify me with the solution with 
what am i missing ?

-- 
You received this message because you are subscribed to the Google Groups 
"grpc.io" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion visit 
https://groups.google.com/d/msgid/grpc-io/8161a0e2-da19-43f8-b744-b97e574324f1n%40googlegroups.com.

Reply via email to