grpc - 如果启用 https,是否需要 TLS?

grpc - is TLS necessary if https enabled?

我是 grpc 的新手,玩过 java、go 和 python 的简单 grpc 客户端。我知道基本的 http 和 https 但不熟悉协议细节。所以这个问题对你来说可能很可笑,但我在网上没有找到任何解释。

我知道grpc有不安全模式(go: grpc.WithInsecure(), python: grpc.insecure_channel, java: usePlaintext()) 和安全模式(TLS).而grpc是基于httpv2的,http有安全模式(https)。

那么如果将不安全的 grpc 与 https 一起使用会怎样?整体数据传输安全吗?

并且如果使用带 https 的 TLS grpc 会怎么样?是否有性能开销(因为我认为消息被加密了两次)?

感谢您的任何回答,任何解释此类主题的现有网页将是最好的!

不安全 暗示 http。 TLS 隐含 https。所以没办法"to use insecure grpc with https",因为那时是http.

没有双重加密。 gRPC安全模式与HTTP安全模式相同

如果您的 gRPC 服务器正在处理来自外部(外部网络)的请求,强烈建议您使用基于 TLS 的 gRPC。例如,您正在 javascript 中创建前端应用程序来满足用户请求。您的 javascript 应用会调用您的 gRPC 服务器以获取服务器提供的 API。您的 javascript 通过在 javascript 端创建的存根与您的 gRPC 服务器通信。在你的 gRPC 服务器端,你需要设置 tls 机制来保护你的 javascript 应用程序和你的 gRPC 服务器之间的通信(因为请求来自外部)。

gRPC 在某种程度上主要用于微服务架构中内部网络内部的内部服务通信。您不需要为内部网络使用设置 tls,因为请求来自您自己的环境,来自您的手表。

如果您想应用“gRPC over HTTPS”之类的东西,那么您需要诸如网关之类的东西来将您的 http 调用映射到您的 gRPC 服务器。检查 this

您还需要使用提供的工具将 proto 文件编译为网关服务定义。现在,您可以通过 http.ListenAndServeTLS(...) 之类的方式创建启用了 tls 的普通 http 服务器。不要忘记使用从 proto 文件编译的服务定义将 grpc 服务器注册到 http 服务器。有了这个,你所有的请求都像普通的 rest api 一样用 tls 加密到你的 http 服务器,但是被代理到你定义的 gRPC 服务器。无需在您的 gRPC 服务器上启用 tls,因为它已在您的 http 服务器上启用。