【问题标题】:Dealing with TLS on gRPC在 gRPC 上处理 TLS
【发布时间】:2018-09-06 18:28:06
【问题描述】:

我正在连接到具有 SSL 证书的 TLS 支持的服务器。我在 Android 应用程序客户端上收到 SSL 握手错误。我还使用useTransportSecurity() 来处理 TLS 协商类型。是否有任何解决方法可以在没有证书固定的情况下解决此错误?

遇到错误:

Caused by: java.lang.RuntimeException: protocol negotiation failed

    at io.grpc.okhttp.OkHttpProtocolNegotiator.negotiate(OkHttpProtocolNegotiator.java:96)

    at io.grpc.okhttp.OkHttpProtocolNegotiator$AndroidNegotiator.negotiate(OkHttpProtocolNegotiator.java:147)

    at io.grpc.okhttp.OkHttpTlsUpgrader.upgrade(OkHttpTlsUpgrader.java:63)

    at io.grpc.okhttp.OkHttpClientTransport$2.run(OkHttpClientTransport.java:474)

    at io.grpc.internal.SerializingExecutor.run(SerializingExecutor.java:123)

    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162) 

    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636) 

    at java.lang.Thread.run(Thread.java:764) 

这就是我生成频道的方式:

ManagedChannel mChannel = OkHttpChannelBuilder.forAddress(host, port)
        .useTransportSecurity()
        .build();



感谢您的时间和帮助。

【问题讨论】:

    标签: android ssl tls1.2 grpc grpc-java


    【解决方案1】:

    ALPN 在 TLS 握手期间失败,这会阻止 gRPC 协商 HTTP/2。要么您没有连接到 gRPC / HTTP/2 服务器,要么您的客户端的 TLS 库太旧。

    请查看SECURITY.md 文档。也就是说,您可能希望在应用启动时将 Play Services Dynamic Security Provider “安装”到运行时中。

    【讨论】:

    • 端点需要 ALPN TLS 支持,这就像一个魅力。但是,我仍然想知道为什么 Android 需要安装 Dynamic Security Provider。我尝试了一些我拥有的新旧 Android 设备,但似乎没有发现任何问题
    • 来自 SECURITY.md:“虽然 ALPN 主要适用于较新的 Android 版本(尤其是从 5.0 开始),但存在一些错误和发现的安全漏洞,只有通过升级安全提供程序才能修复。”一些错误是在应用程序的其他部分完成的库调用竞争(例如,如果您在应用程序的其他地方使用 NPN)。这类事情会“随机”触发。此外,旧设备可能使用 NPN 而不是 ALPN。这可能在今天有效,但需要服务器上的 NPN。但 NPN 支持正在生态系统中消失。
    【解决方案2】:

    这可能是你如何创建服务器的问题;见SECURITY.mdMutual TLS ...

    Server server = NettyServerBuilder.forPort(8443)
        .sslContext(GrpcSslContexts.forServer(certChainFile, privateKeyFile)
        .trustManager(clientCAsFile)
        .clientAuth(ClientAuth.REQUIRE)
        .build());
    

    【讨论】:

      【解决方案3】:

      回答我自己的问题。

      此错误来自 ALPN TLS 扩展,我需要我的 SSL 端点来支持它。我使用的是 NPN,这就是我无法连接的原因。

      由 Carl Mastrangelo 在 grpc.io 谷歌群组中发布

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-02-20
        • 2019-09-03
        • 2018-07-01
        • 2020-08-15
        • 1970-01-01
        • 2016-12-13
        • 1970-01-01
        • 2019-03-03
        相关资源
        最近更新 更多