问题标签 [alpn]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
3339 浏览

java - 如何使用 ALPN 使用 SPDY 运行 Jetty?

我已经使用 Jetty 和 SPDY 返回 JDK8,我看到现在 Jetty 9.2 支持 ALPN 协议而不是 NPN(请参阅我的问题How to run Jetty with SPDY on JDK8?)。所以我设置bootclasspath

但现在我得到了例外:

我使用java version "1.8.0_05"和码头 9.2.2.v20140723。

我在 JDK 1.7 和alpn-boot-7.0.0.v20140317.jarWinXP 上遇到了同样的错误,如果从-Xbootclasspath/p:c:/jars/npn-boot/npn-boot-1.1.7.v20140316.jar

这个执行在我的代码中指向:

似乎即使使用 ALPN 码头也需要来自 npn-boot 的类。这是一个错误还是我做错了什么?

0 投票
1 回答
352 浏览

java - 如何使用 ALPN 在 Jetty SPDY 上使用客户端证书?

当我将 SPDY 与 Jetty 一起使用时,我遇到了客户端证书问题。

当我使用 NPN 并启动 Jetty SPDY 服务器时,它可以工作:

作为baseRequest.getHttpChannel()它使用org.eclipse.jetty.spdy.server.http.HttpChannelOverSPDY,我可以读取 SSL 属性SSL_SESSION_ID和客户端证书,其代码如下:

但是 NPN 在 Java8 中不是一个选项(请参阅我的问题How to run Jetty with SPDY using ALPN?)。在 Java8 中,我必须使用 ALPN 协议,例如:

null我想获得任何与 SSL 相关javax.servlet.request.*的 . 它baseRequest.getHttpChannel()org.eclipse.jetty.server.HttpConnection$HttpChannelOverHttp

我必须更改哪些内容才能使用客户端证书?

0 投票
1 回答
1547 浏览

http - Jetty 9.3 SSL-ALPN-HTTP2 错误 ERR_EMPTY_RESPONSE 仅使用 HTTPS

我已将 Jetty 9.2 HTTP/1.1 + SSL only 服务器(嵌入式)升级到 Jetty 9.3.0 (v20150612) HTTP/HTTPS 2.0 (SLL(TLS)-ALPN-HTTP/2)。我使用 JRE 8(Oracle 1.8.0 Build 45 - b15)和 Eclipse。

* JOAKIM 的回答解决了问题:请参阅帖子末尾的解决方案 *

在升级之前,HTTP 和 HTTPS 工作正常,并且通过简单地使用 Jetty 9.3 Jar 文件重建仍然可以。然后我升级了代码(从我设法找到的示例中学习)以合并 SSL(TLS)-ALPN-HTTP/2-HTTP/1.1。我使用的主要示例 在此链接中,带有代码

Google Chrome(版本 43.0.2357.130 m)浏览器可以很好地处理 http 请求,例如 http://10.32.1.110:8080/ 并显示网页。但是,如果我打开第二个选项卡并尝试 https://10.32.1.110:8443/,我会收到错误 ERR_EMPTY_RESPONSE。但是,我可以连接到 webtide.com 并获得一个 https 会话。已排除防火墙对我的系统的干扰。10.32.??? 对于工作 HTTP 和失败的 HTTPS,连接没有通过它。

此错误不会阻止 Jetty 服务器(服务器不会抛出或记录错误),我可以返回第一个浏览器选项卡并继续请求网页,我看到它已更新(我有一个时间戳和计数器)每次。

在 HTTPS 情况下,Jetty 不会调用我的 handle() 方法(我有一个日志行来监控它),我看到只有 HTTP 请求来自 handle() 方法。根据 Jetty 请求对象,到达我的 handle() 的 http 请求属于 HTTP/1.1 类型。根据我的研究,这是正常的,因为 Google Chrome 不会在没有 SSL/ALPN 的情况下执行 HTTP/2。

我一直在考虑 SSL 和 ALPN 问题的方向,因为 HTTPS 请求导致 ERR_EMPTY_RESPONSE。alpn-api-1.1.2.v20150522.jar 作为“-Xbootclasspath/p:D:\Users\TWO\DATA\Eclipse\alpn-api-1.1.2”添加到我的 Eclipse VM Arguments(相当于 JVM 引导类路径)中.v20150522\alpn-api-1.1.2.v20150522.jar" 从那时起,Jetty 不再抱怨 ALPN 不在 JVM 引导类路径上(通过像以前一样抛出错误)。从下面的 Jetty 日志中,SLL 和 HTTP/2 也正确启动。

Jetty 服务器正常启动时会出现以下日志:

以下是相关的 Java 服务器代码:

应 gregw 的要求,我尝试了顶部链接中的示例代码。我只修改了 SslContextFactory 的密钥库的路径。我总是使用相同的密钥库文件,因为我知道它没问题(请参阅帖子的开头 - 我的旧 HTTP/1.1+SLL 工作并使用了相同的密钥库。

使用 http 访问有效,但使用 https 无效,浏览器再次显示 ERR_EMPTY_RESPONSE。

尝试使用 IExplorer 11。结果相同。适用于 http 不适用于 https(msg = 此页面无法显示)不要与 404 混淆(无法找到此页面)。与 Chrome 相比,IE 确实在 greg 的代码与 http 一起使用时给出了“Cookie”警告,但它没有与 https 一起使用。

有没有人可能知道如何解决上述问题。TIA

* 解决方案 *

正如 Joakim 所建议的,我将 alpn-boot-8.1.3.v20150130.jar 而不是 alpn-api-1.1.2.v20150522.jar 添加到引导类路径中。测试导致以下组合完美运行:

  • HTTP/1.1 (HTTP) - 使用谷歌浏览器完成
  • HTTP/1.1 (HTTP) - 第二次尝试使用 IE

  • HTTP/2.0 + SSL (HTTPS) - 使用谷歌浏览器完成

  • HTTP/1_1 + SLL (HTTPS) - 用 IE 完成

  • HTTP/2_0 (HTTP) - 由于缺乏快速的用户代理,没有进行测试。

这些是我唯一感兴趣的未来组合,尽管我确信带有 SSL 的 HTTP/2_0 也可以工作。

这个Jetty 文档链接显示了 JRE 版本和 ALPN JAR 文件版本之间的表格,以防一个人与另一个 JRE 有相同的问题。

非常感谢所有试图帮助解决这个问题的人。

0 投票
3 回答
1973 浏览

c# - 如何在 .NET C# 中为 HTTP/2 服务器实现 TLS-ALPN

有谁知道,我如何在 .NET中实现TLS-ALPN ?

我已经实现了一个基本的 HTTP/2 服务器,但没有 TLS 加密。我在谷歌搜索,但我只找到了 C、Java 或其他语言的资源,但没有找到 .NET (C#)

0 投票
1 回答
1768 浏览

http2 - 我可以在没有 ALPN 支持的情况下实现 http/2 服务器吗?

这样客户端就可以在没有ALPN的情况下连接服务器,默认使用http/2。

这可能吗?</p>

0 投票
1 回答
482 浏览

okhttp - 我可以通过 NPN 协商使用 OkHttp 发送 http/2 请求吗?

我注意到 OkHttp 在 Android 5.0+ 中通过 ALPN 支持 h2。

一些文章中,我了解到我们可以使用 NPN 协商来处理 http/2 请求。

我可以通过 NPN 协商使用 OkHttp 发送 http/2 请求吗?

这样就可以在 android 4.1+ 上以更好的网络性能支持 h2 :-D

0 投票
1 回答
1449 浏览

python-2.7 - Python 2.7 中的 TLS ALPN

我正在开发一些 HTTP/2 客户端,我想添加 SSL 支持。根据 RFC,协议的协商是使用 ALPN 协议进行的。python 2.7中是否有ALPN的实现?

(我知道有 HTTP/2 客户端实现,但我想自己写)

谢谢!

0 投票
0 回答
592 浏览

java - 如何在 NETBEANS 上使用 ALPN 使用 SPDY 运行 Jetty?

有没有办法在 Netbeans 上使用 ALPN 使用 SPDY 运行 Jetty?我正在尝试使用,但它在控制台上显示此消息:

2015 年 11 月 14 日下午 4:40:01 com.squareup.okhttp.internal.Platform$JdkWithJettyBootPlatform

getSelectedProtocol 信息:ALPN 回调已删除:SPDY 和 HTTP/2 已禁用。alpn-boot 在引导类路径上吗?

我在我的 netbeans 项目中使用 JDK 8u66 和 alpn-boot-8.1.6.v20151105.jar

所以当我尝试在我的 CMD 上使用这个命令 java -Xbootclasspath/p:时,我喜欢这样:

但是什么也没发生,或者它无法运行主类,我不知道为什么。

我从 Jetty 网站本身获取这个命令:

http://www.eclipse.org/jetty/documentation/current/alpn-chapter.html

我在 Test.class 上使用这段代码

此代码使用支持 HTTP/2 的 OKhttp 技术。这段代码的主要目的是发现某个网站是否使用 HTTP/2。

0 投票
0 回答
897 浏览

maven - 如何将依赖项添加到引导类路径?

我正在尝试将alpn-boot依赖项添加到引导类路径。以下应该在 pom.xml 文件中起作用:

但是,它绝对没有被添加到引导类路径中。我在 Pivotal Web Services 上运行我的应用程序。可能与此有关吗?还是我的 pom.xml 文件有问题?

0 投票
1 回答
635 浏览

java - 如何将 ALPN 添加到 Java 7

是否可以将 ALPN 添加到 Java 7 应用程序的引导类路径中?如果是,我们该怎么做?

Internet 上有很多示例告诉如何通过 Java 8 和 Undertow、Tomcat、Jetty 等来实现。

我是否需要将安全库添加到我的 VM 中?Java 8 似乎已经包含了它们。