问题标签 [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.
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.jar
WinXP 上遇到了同样的错误,如果从-Xbootclasspath/p:c:/jars/npn-boot/npn-boot-1.1.7.v20140316.jar
这个执行在我的代码中指向:
似乎即使使用 ALPN 码头也需要来自 npn-boot 的类。这是一个错误还是我做错了什么?
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
。
我必须更改哪些内容才能使用客户端证书?
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 有相同的问题。
非常感谢所有试图帮助解决这个问题的人。
c# - 如何在 .NET C# 中为 HTTP/2 服务器实现 TLS-ALPN
有谁知道,我如何在 .NET中实现TLS-ALPN ?
我已经实现了一个基本的 HTTP/2 服务器,但没有 TLS 加密。我在谷歌搜索,但我只找到了 C、Java 或其他语言的资源,但没有找到 .NET (C#)
http2 - 我可以在没有 ALPN 支持的情况下实现 http/2 服务器吗?
这样客户端就可以在没有ALPN的情况下连接服务器,默认使用http/2。
这可能吗?</p>
okhttp - 我可以通过 NPN 协商使用 OkHttp 发送 http/2 请求吗?
我注意到 OkHttp 在 Android 5.0+ 中通过 ALPN 支持 h2。
从一些文章中,我了解到我们可以使用 NPN 协商来处理 http/2 请求。
我可以通过 NPN 协商使用 OkHttp 发送 http/2 请求吗?
这样就可以在 android 4.1+ 上以更好的网络性能支持 h2 :-D
python-2.7 - Python 2.7 中的 TLS ALPN
我正在开发一些 HTTP/2 客户端,我想添加 SSL 支持。根据 RFC,协议的协商是使用 ALPN 协议进行的。python 2.7中是否有ALPN的实现?
(我知道有 HTTP/2 客户端实现,但我想自己写)
谢谢!
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。
maven - 如何将依赖项添加到引导类路径?
我正在尝试将alpn-boot
依赖项添加到引导类路径。以下应该在 pom.xml 文件中起作用:
但是,它绝对没有被添加到引导类路径中。我在 Pivotal Web Services 上运行我的应用程序。可能与此有关吗?还是我的 pom.xml 文件有问题?
java - 如何将 ALPN 添加到 Java 7
是否可以将 ALPN 添加到 Java 7 应用程序的引导类路径中?如果是,我们该怎么做?
Internet 上有很多示例告诉如何通过 Java 8 和 Undertow、Tomcat、Jetty 等来实现。
我是否需要将安全库添加到我的 VM 中?Java 8 似乎已经包含了它们。