Grpc netty всегда устанавливает TLS1.2, даже если настроен TLS1.3 в контексте SSL как на сервере, так и на клиентеJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Grpc netty всегда устанавливает TLS1.2, даже если настроен TLS1.3 в контексте SSL как на сервере, так и на клиенте

Сообщение Anonymous »

Я использую NetTyChannelBuilder в GRPC Client и NettyServerbuilder на сервере GRPC. < /p>
Я создал NettyServerbuilder с SSLContext с TLS1.3 и запустил сервер, как ниже < /p>
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);
}
< /code>
Также я создал nettychannelbuilder с SSLContext с TLS1.3 и вызов метода RPC на сервере GRPC, как ниже < /p>
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);
}
< /code>
Я использовал ниже TLS1.3 Ciphers как на сервере, так и на клиенте < /p>
private static final Iterable < String > CIPHER_SUITES_SUPPORTED =
Arrays.asList("TLS_AES_256_GCM_SHA384", "TLS_AES_128_GCM_SHA256",
"TLS_CHACHA20_POLY1305_SHA256");
< /code>
, но заметил, что соединение TLS1.2 всегда установлено от клиента к связи сервера. Здесь я настроил с TLS1.3 в SSLContext как в клиенте, так и в сервере, и я использую Java 11. Он должен установить TLS1.3, верно? < /P>
Это ошибка в GRPC? В противном случае, пожалуйста, уточните меня с решением с тем, что мне не хватает?

Подробнее здесь: https://stackoverflow.com/questions/796 ... -context-i
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»