Работа с TLS на gRPC - PullRequest
       42

Работа с TLS на gRPC

0 голосов
/ 06 сентября 2018

Я подключаюсь к серверу, который поддерживает TLS с сертификатами SSL. Я получаю ошибку SSL Handshake на клиенте приложения для Android. Я также использую 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();



Цените свое время и помощь.

Ответы [ 3 ]

0 голосов
/ 06 сентября 2018

Ошибка ALPN во время квитирования TLS, что не позволяет gRPC согласовывать HTTP / 2. Либо вы не подключаетесь к серверу gRPC / HTTP / 2, либо библиотека TLS вашего клиента устарела.

Ознакомьтесь с документацией SECURITY.md . А именно, вы, вероятно, захотите «установить» поставщика динамической безопасности Play Services в среду выполнения при запуске приложения.

0 голосов
/ 08 сентября 2018

Отвечая на мой вопрос.

Эта ошибка происходит из-за расширения ALPN TLS, для поддержки которого мне нужна была моя конечная точка SSL. Я использовал NPN, и поэтому я не смог подключиться.

Автор: Карл Мастранжело в группах gpc.io google

0 голосов
/ 06 сентября 2018

это может быть довольно важно, как вы создаете сервер; см. SECURITY.md для Mutual TLS ...

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