使用GRPC设置SSL-找不到ALPN

时间:2018-11-01 14:15:57

标签: java ssl grpc alpn

我想在我的GRPC服务器上设置SSL。 这是我在做什么:

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 ,它是OpenSSL的SSLProvider。 但是,gRPC无法识别我在这里可用的OpenSSL:

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

编辑: 我可以通过添加VM参数-javaagent:C:/path/to/jetty-alpn-agent.jar

来使其工作

这使得它可以与JDK作为SSL提供程序一起使用。我仍然不明白为什么grpc无法识别我有可用的OpenSSL。我的班级路径中确实有netty-tcnative-boringssl-static

0 个答案:

没有答案