Do you happen to be using Conscrypt JSSE provider? We allow TLS 1.3 for IBM
and ALPN JSSE providers but not for Conscrypt
<https://github.com/grpc/grpc-java/blob/1c430989902856e609ddbff203be1dc4c412ff43/netty/src/main/java/io/grpc/netty/GrpcSslContexts.java#L211>,
for which we hard code it to TLS1.2. There is an open issue
<https://github.com/grpc/grpc-java/issues/7765> for this.
On Wednesday, June 11, 2025 at 9:12:26 AM UTC+5:30 ganesh.umapathy
ganesh.umapathy wrote:
> Can anyone pls check this and help us?
>
> On Tuesday, 10 June 2025 at 09:58:43 UTC+5:30 ganesh.umapathy
> ganesh.umapathy wrote:
>
>> Can anyone pls check and reply on this?
>>
>> On Saturday, 7 June 2025 at 19:41:11 UTC+5:30 ganesh.umapathy
>> ganesh.umapathy wrote:
>>
>>> 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/aa439f1e-6e50-479b-83b4-8169c350043an%40googlegroups.com.