gRPC库运行时指定TLS版本:版本支持与配置方法咨询
gRPC运行时配置TLS版本的支持版本及实现方法
支持运行时配置TLS版本的gRPC版本
gRPC从v1.41.0开始正式支持在运行时动态指定TLS协议版本范围,允许应用按需选择仅使用TLS 1.2、仅使用TLS 1.3,或者同时兼容两者。在此之前的版本(如v1.32.0及以上虽支持TLS 1.3,但仅能通过编译时参数或环境变量控制,无法在代码层面实现运行时动态配置)。
具体配置方法
以下是主流编程语言中的实现示例:
Go语言
通过grpc.WithTLSConfig传入自定义的tls.Config,在其中指定MinVersion和MaxVersion来锁定TLS版本:
import ( "crypto/tls" "google.golang.org/grpc" "google.golang.org/grpc/credentials" ) // 配置仅使用TLS 1.2 tlsConfig12 := &tls.Config{ MinVersion: tls.VersionTLS12, MaxVersion: tls.VersionTLS12, // 补充证书、密钥等其他必要配置 } creds12 := credentials.NewTLS(tlsConfig12) conn12, err := grpc.Dial("server:port", grpc.WithTransportCredentials(creds12)) // 配置仅使用TLS 1.3 tlsConfig13 := &tls.Config{ MinVersion: tls.VersionTLS13, MaxVersion: tls.VersionTLS13, // 补充证书、密钥等其他必要配置 } creds13 := credentials.NewTLS(tlsConfig13) conn13, err := grpc.Dial("server:port", grpc.WithTransportCredentials(creds13))
Java语言
使用NettyChannelBuilder时,通过SslContextBuilder的protocols方法指定目标TLS版本:
import io.grpc.netty.NettyChannelBuilder; import io.netty.handler.ssl.SslContextBuilder; import io.netty.handler.ssl.SslProvider; import javax.net.ssl.SSLException; // 配置仅使用TLS 1.2 SslContext sslContext12 = SslContextBuilder.forClient() .sslProvider(SslProvider.OPENSSL) .protocols("TLSv1.2") // 补充证书信任库等其他必要配置 .build(); var channel12 = NettyChannelBuilder.forAddress("server", port) .sslContext(sslContext12) .build(); // 配置仅使用TLS 1.3 SslContext sslContext13 = SslContextBuilder.forClient() .sslProvider(SslProvider.OPENSSL) .protocols("TLSv1.3") // 补充证书信任库等其他必要配置 .build(); var channel13 = NettyChannelBuilder.forAddress("server", port) .sslContext(sslContext13) .build();
C++语言
通过SslCredentialsOptions中的min_version和max_version字段指定TLS版本范围:
#include <grpcpp/grpcpp.h> #include <grpcpp/security/credentials.h> // 配置仅使用TLS 1.2 grpc::SslCredentialsOptions ssl_opts12; ssl_opts12.min_version = GRPC_SSL_TLS1_2_VERSION; ssl_opts12.max_version = GRPC_SSL_TLS1_2_VERSION; // 补充证书路径等其他必要配置 auto creds12 = grpc::SslCredentials(ssl_opts12); auto channel12 = grpc::CreateChannel("server:port", creds12); // 配置仅使用TLS 1.3 grpc::SslCredentialsOptions ssl_opts13; ssl_opts13.min_version = GRPC_SSL_TLS1_3_VERSION; ssl_opts13.max_version = GRPC_SSL_TLS1_3_VERSION; // 补充证书路径等其他必要配置 auto creds13 = grpc::SslCredentials(ssl_opts13); auto channel13 = grpc::CreateChannel("server:port", creds13);
内容的提问来源于stack exchange,提问作者Manish Khandelwal
相关产品推荐
相关产品推荐

