如何在 JDK8 上使用 SPDY 运行 Jetty?

Posted

技术标签:

【中文标题】如何在 JDK8 上使用 SPDY 运行 Jetty?【英文标题】:How to run Jetty with SPDY on JDK8? 【发布时间】:2014-05-01 18:42:37 【问题描述】:

有几天我们有 JDK8。我试图用 SPDY 服务器运行 Jetty。在 JDK8 中没有 NPN 支持,所以它以:

[qtp22068985-16-selector-ServerConnectorManager@12e7b0e/1] WARN
org.eclipse.jetty.io.SelectorManager - Exception while notifying connection SslConnection@e1448aNEED_UNWRAP,eio=-1/-1,di=-1 ->
NPNServerConnection@382d40IDLE
java.lang.NoSuchMethodError:
sun.security.ssl.HandshakeHash.<init>(ZZLjava/util/Set;)V
    at sun.security.ssl.Handshaker.activate(Handshaker.java:493)

我在 CLASSPATH 上使用npn-boot-1.1.6.v20130911.jar 运行它,它适用于最新的 JDK7。

关于如何在 JDK8 上使用 SPDY 运行 Jetty 有什么解决方法吗?

【问题讨论】:

【参考方案1】:

我是 Jetty 中 NPN 的实现者。

NPN 是通过修改 JDK 类来实现的,因为 JDK 中缺少 TLS 扩展 API。 NPN 版本严格匹配 documentation 中指定的 JDK 版本。

对于 JDK 8,我们不打算支持 NPN。相反,我们将支持作为 NPN 后继者的 ALPN,并将 ALPN 实现也向后移植到 JDK 7。

ALPN 的实现已经在一个分支中完成,但尚未集成到主 Jetty 构建中。

你得耐心一点,我们需要完成一堆事情,并将 ALPN 集成到 Jetty master 中。完成后,我们将blog about。

【讨论】:

我在使用热点 jdk1.8u40 java.lang.NoSuchMethodError: sun.security.ssl.HandshakeHash.setCertificateVerifyAlg 时遇到异常。这仅适用于 OpenJDK 吗? JDK 8 不支持 NPN,您必须使用 ALPN。

以上是关于如何在 JDK8 上使用 SPDY 运行 Jetty?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Heroku 上使用 Rails 3.2.2 实现 SPDY?

如何运行瓶子 + 龙卷风 + ssl (https) + spdy

如何通过 ALPN 在 Jetty SPDY 上使用客户端证书?

在 Android 上添加 spdy 编解码器后使用 netty 连接失败

SPDY - 没有 TLS?

SPDY 可以在啥级别上使用?