【问题标题】:grpc - is TLS necessary if https enabled?grpc - 如果启用了 https,是否需要 TLS?
【发布时间】:2019-11-18 08:47:12
【问题描述】:

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

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

那么如果在 https 中使用不安全的 grpc 会怎样?整体数据传输安全吗?

如果将 TLS grpc 与 https 一起使用会怎样?是否存在性能开销(因为我认为消息被加密了两次)?

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

【问题讨论】:

  • 是的。 HTTPS 是基于 TLS 的 HTTP。
  • 所以我上面的两个假设是真的?

标签: http ssl https grpc tls1.2


【解决方案1】:

不安全暗示 http。而 TLS 暗示 https。所以没有办法“将不安全的 grpc 与 https 一起使用”,因为那时它是 http。

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

【讨论】:

    【解决方案2】:

    如果您的 gRPC 服务器正在处理来自外部(外部网络)的请求,强烈建议使用 gRPC over TLS。例如,您正在使用 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 服务器。有了这个,您的所有请求都使用 tls 加密到您的 http 服务器,就像普通的 rest api 一样,但被代理到您定义的 gRPC 服务器。不需要在您的 gRPC 服务器上启用 tls,因为它已在您的 http 服务器中启用。

    【讨论】:

    • "你的gRPC服务器上不需要启用tls,因为它已经在你的http服务器中启用了"---如果grpc服务器也是tls怎么办?是否经过两次加密?
    • 是的,两次,如果您不信任您的网络,您也可以对其进行加密。有人说你应该在每一端都加密。
    猜你喜欢
    • 2021-09-05
    • 1970-01-01
    • 1970-01-01
    • 2020-02-24
    • 2021-08-12
    • 1970-01-01
    • 2018-01-17
    • 2012-06-14
    • 2017-10-26
    相关资源
    最近更新 更多