什么ManagedChannelBuilder没有用于建立到服务

什么ManagedChannelBuilder没有用于建立到服务

本文介绍了为什么ManagedChannelBuilder没有用于建立到服务器的TLS连接的TLS参数?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在本例https://github.com/grpc/grpc-java/blob/master/interop-testing/src/test/java/io/grpc/testing/integration/TlsTest.java中,您可以看到TLS客户端连接具有各种TLS参数,如

        .negotiationType(NegotiationType.TLS)
        .sslContext(sslContext)

但我的应用程序到目前为止使用的是https://github.com/grpc/grpc-java/blob/master/core/src/main/java/io/grpc/ManagedChannelBuilder.java,默认情况下似乎支持TLS。它唯一接受的参数是"usePlaintext",该参数可以关闭TLS。

注意:我已按照https://grpc.io/docs/guides/auth.html的建议在计算机上安装了OpenSSL

此页面声明:

因此,您可能只能在客户端知道颁发CA时才能使用ManagedChannelBuilder...但我不确定这是什么意思。也许这意味着证书在JVM的密钥库上?

为什么不必在Managed通道生成器上指定TLS参数?

TLS

更新:由于grpc-推荐答案v1.37.0、TlsChannelCredentialsTlsServerCredentials提供了在大多数情况下配置TLS所需的选项,因此只有极少数情况下才需要特定于传输的API。TlsChannelCredentialsTlsServerCredentials是稳定的接口,可以和稳定的ManagedChannelBuilder接口一起使用,所以应该优先使用不稳定的传输特定接口。


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

但是,NettyChannelBuilderOkHttpChannelBuilder上提供了更具体的配置。由于实现方式不同,因此如何配置TLS是不同的。您第一个代码片段中的sslContext是一个Netty对象;OkHttpChannelBuilder中的配置显然很差。

ManagedChannelBuilder不应该具有所有选项。&它应该具有跨传输实现存在的公共选项。在NettyChannelBuilderOkHttpChannelBuilder等特定传输实现构建器上提供了更具体的选项。

这篇关于为什么ManagedChannelBuilder没有用于建立到服务器的TLS连接的TLS参数?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-24 12:42