Настройка SSL с GRPC - ALPN не найден - PullRequest
0 голосов
/ 01 ноября 2018

Я хочу настроить SSL на моем сервере GRPC. Вот что я делаю:

Server server = NettyServerBuilder.forPort(8080)
                    .useTransportSecurity(certChain, privateKey)
                    .addService(new HelloWorldService())
                    .build();

Теперь я получаю ClassnotFoundException:

Caused by: java.lang.ClassNotFoundException: org/eclipse/jetty/alpn/ALPN
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:348)
    at io.grpc.netty.JettyTlsUtil.isJettyAlpnConfigured(JettyTlsUtil.java:34)
    at io.grpc.netty.GrpcSslContexts.selectApplicationProtocolConfig(GrpcSslContexts.java:153)
    ... 5 more

Если мы рассмотрим метод JettyTlsUtil.isJettyAlpnConfigured () , мы увидим Class.forName ("org.eclipse.jetty.alpn.ALPN", true, null);

Теперь у меня есть ALPN в моем классе. Также я настроил свои зависимости в соответствии с таблицей, представленной здесь https://github.com/grpc/grpc-java/blob/master/SECURITY.md#transport-security-tls

Люди из gRPC не рекомендуют использовать JDK в качестве SSLProvider. Поэтому я скачал io.netty.internal.tcnative.SSL , который является SSLProvider от OpenSSL. Тем не менее, gRPC не распознает, что у меня есть OpenSSL здесь:

  /**
   * Returns OpenSSL if available, otherwise returns the JDK provider.
   */
  private static SslProvider defaultSslProvider() {
    return OpenSsl.isAvailable() ? SslProvider.OPENSSL : SslProvider.JDK;
  }

EDIT: Я смог заставить его работать, добавив аргумент VM -javaagent: C: /path/to/jetty-alpn-agent.jar

Это позволяет работать с JDK в качестве поставщика SSL. Я до сих пор не понимаю, почему grpc не распознает, что у меня есть OpenSSL. У меня есть netty-tcnative-boringssl-static в моем классе.

...