Java 为什么ManagedChannel Builder没有用于建立到服务器的TLS连接的TLS参数?

Java 为什么ManagedChannel Builder没有用于建立到服务器的TLS连接的TLS参数?,java,ssl,grpc,Java,Ssl,Grpc,在本例中,您可以看到TLS客户端连接具有各种TLS参数,例如 .negotiationType(NegotiationType.TLS) .sslContext(sslContext) 但到目前为止,我的应用程序使用了默认情况下似乎支持TLS的。它采用的唯一参数是“usePlaintext”,它可以关闭TLS 注意:我已经按照 本页未说明: 如果客户端不知道颁发证书的机构,则应分别向NettyChannel Builder或OkhttpChannel Build

在本例中,您可以看到TLS客户端连接具有各种TLS参数,例如

        .negotiationType(NegotiationType.TLS)
        .sslContext(sslContext)
但到目前为止,我的应用程序使用了默认情况下似乎支持TLS的。它采用的唯一参数是“usePlaintext”,它可以关闭TLS

注意:我已经按照

本页未说明:

如果客户端不知道颁发证书的机构,则应分别向NettyChannel Builder或OkhttpChannel Builder提供正确配置的SslContext或SSLSocketFactory

因此,您可能只能在客户端知道发出ca时使用
ManagedChannel Builder
。。。但我不确定这意味着什么。也许这意味着cacert在jvm的密钥库中


为什么我不必在
Managed
channel builder上指定TLS参数?

TLS配置很复杂,并且取决于实现,并且
managedChannel builder
可以与TLS以外的东西一起使用。因此,
managedChannel Builder
仅具有TLS的粗略配置(开/关)。这在常见的web浏览器TLS情况下运行良好:1)没有客户端证书,2)服务器证书由一个CA签名,该CA链接到客户端信任存储中的根CA

但是,
NettyChannelBuilder
OkHttpChannelBuilder
上提供了更具体的配置。由于实现方式不同,因此每个应用程序的TLS配置方式不同。第一个代码片段中的
sslContext
是一个Netty对象;这显然是
OkHttpChannelBuilder
中的糟糕配置

ManagedChannelBuilder
不应该有“所有选项”。它应该有跨传输实现的通用选项。在特定的传输实现生成器上提供了更多的特定选项,如
NettyChannelBuilder
OkHttpChannelBuilder