问题描述
在本例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、TlsChannelCredentials
和TlsServerCredentials
提供了在大多数情况下配置TLS所需的选项,因此只有极少数情况下才需要特定于传输的API。TlsChannelCredentials
和TlsServerCredentials
是稳定的接口,可以和稳定的ManagedChannelBuilder
接口一起使用,所以应该优先使用不稳定的传输特定接口。
TLS配置复杂且依赖于实现,ManagedChannelBuilder
可以与TLS以外的东西一起使用。因此,ManagedChannelBuilder
仅具有TLS的粗略配置(开/关)。这在常见的Web浏览器TLS情况下运行良好:1)没有客户端证书,2)服务器证书由链接到客户端信任存储中的根CA的CA签名。
NettyChannelBuilder
和OkHttpChannelBuilder
上提供了更具体的配置。由于实现方式不同,因此如何配置TLS是不同的。您第一个代码片段中的sslContext
是一个Netty对象;OkHttpChannelBuilder
中的配置显然很差。ManagedChannelBuilder
不应该具有所有选项。&它应该具有跨传输实现存在的公共选项。在NettyChannelBuilder
和OkHttpChannelBuilder
等特定传输实现构建器上提供了更具体的选项。
这篇关于为什么ManagedChannelBuilder没有用于建立到服务器的TLS连接的TLS参数?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!