繁体   English   中英

在gRPC上处理TLS

[英]Dealing with TLS on gRPC

我正在连接到具有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();



感谢您的时间和帮助。

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

请查看SECURITY.md文档。 即,您可能希望在应用启动时将Play Services动态安全提供程序“安装”到运行时。

如何创建服务器可能只是一个问题; 有关Mutual TLS请参阅SECURITY.md ...

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

回答我自己的问题。

此错误来自ALPN TLS扩展,我需要我的SSL端点来支持。 我正在使用NPN,这就是为什么我无法连接。

由Carl Mastrangelo发表在grpc.io Google组中

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM