问题标签 [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 投票
3 回答
1787 浏览

android - Android grpc 错误:TLS ALPN 协商失败,协议:[grpc-exp,h2]

我正在尝试在 Android 应用程序中使用 grpc

代码的重要部分是:

带有版本和依赖项的 build.gradle:

原型似乎没问题,并且应用程序在没有 TLS 的情况下工作(.usePlaintext()

但我收到了这个错误:

java.lang.RuntimeException: TLS ALPN negotiation failed with protocols: [grpc-exp, h2]

SSL 握手似乎有问题。

奇怪的是,服务器使用 BloomRCP 和 TLS 工作。

我尝试了不同的 minSdkVersions,也使用了不同的 io.grpc.* lib 版本,并创建了一个空的 repo,其中只有 proto 文件和运行它的基本代码,但没有添加 .connectionSpec() 以及不同的 CipherSuite。

使用 Wireshark 我可以看到我发送的 TLS 版本是 1.2,这是正确且预期的(也许它没有使用 HTTP2?)

有客人吗?提前致谢!

-------------------------------------------------- - 编辑 - - - - - - - - - - - - - - - - - - - - - - - - ---

查看我发现这个方法的库:useTransportSecurity()

我们默认使用带有 HTTP/2 的 TLS,所以这不是问题......

0 投票
1 回答
862 浏览

jmeter - 使用 JMeter 的 HTTP/2 请求因“nullSession”而失败 (jetty-alpn)

我已经为 JMeter 安装了Blazemeter HTTP/2 插件,但无法让 HTTP/2 请求正常工作。

我的最小测试如下所示:

截屏

  • 线程组
    • HTTP2 请求
      • 服务器:stackoverflow.com
      • 协议:https
    • 查看结果树 Http2

运行测试会在视图结果树中显示以下采样器结果:

和日志:

将协议更改为 HTTP

如果我将协议更改为HTTP,则会得到以下采样器结果:

这是日志:

我的设置:

openjdk version "1.8.0_252"在 Linux ( ) 上使用 JMeter 5.2.1 和 OpenJDK 8 ( version 5.6.15-arch1-1)

在 Ubuntu 20.04 上使用 JMeter 5.3 得到相同的结果,在 CLI 模式下运行

jmeter根据 HTTP/2 插件的要求,我在启动脚本的顶部添加了以下行:

如何解决或调试此问题?

更新:

我发现,一旦我alpn-boot按照上面提到的方式使用,我对常规 HTTP 请求的行为相同,所以这似乎是该库的问题。在https://github.com/jetty-project/jetty-alpn/blob/master/docs/version_mapping.properties有一个 jetty-alpn 版本与 Java 版本的映射表,它目前不包含我的 Java 版本。

文档说_

该表仅显示了到 OpenJDK 8u242 的映射,这是需要 ALPN 引导 jar 的最后一个版本。

但是如果我在没有 alpn 参数的情况下启动 JMeter,我会看到这样的结果(HTTP/2 with HTTPS):

0 投票
1 回答
210 浏览

nginx - 如何为无 ALPN 客户端配置 Nginx 仅支持 HTTP2

情况如下:我们的客户想要支持一些旧的ios mac系统,它使用的网络库不支持ALPN。我们的服务器设置为只接受 gRPC 请求,因此服务器不需要接受 HTTP1.1 请求。

那么如何禁用 Nginx 以接受 HTTP1.1 请求并仅启用 HTTP2 支持并跳过 ALPN?

我试图让 Nginx 默认支持 http2,但它仍然涉及 ALPN 过程。

0 投票
1 回答
1772 浏览

apple-push-notifications - ALPN 回调被丢弃:HTTP/2 被禁用。IBM Webshere 9 JAVA 8 上的 alpn-boot 在引导类路径上吗?

在这方面需要帮助。

使用 OKhttp3 客户端向 Apple 推送服务器发送 HTTP2 请求。

服务器:Webshere 9 Java:8 OKhttp3:4.8.1 还在引导类路径中添加了 ALPN jar。ALPN jar 版本与 bootclasspath 中的 JDK 版本准确映射。

在 IBM Webshere 9 日志文件中获取此错误消息。 ALPN 回调被丢弃:HTTP/2 被禁用。alpn-boot 在引导类路径上吗?

谢谢你的帮助。

0 投票
1 回答
506 浏览

c# - 在端口 443 上使用 ALPN 将 M2MQTT 客户端库连接到 AWS IoT 时出现问题

我正在使用 m2mqtt.net 的 .net 框架构建(可在此处获得:https ://github.com/mohaqeq/paho.mqtt.m2mqtt )。在端口 8883 上连接标准 mqtt 工作正常:

使用 ALPN 扩展在端口 443 上连接 mqtt 不起作用:

ALPNProtocols 参数根据要求设置:

当我连接 ( _MqttClient.Connect(serial);) 时,m2mqtt.net 项目文件中的所有内容都运行顺利,直到它到达 MqttClient.cs 中的第 1102 行:

然后它等待 30 秒,然后超时并抛出异常:“抛出了 'uPLibrary.Networking.M2Mqtt.Exceptions.MqttCommunicationException' 类型的异常。”

我做了一个网络跟踪,在 TLS 握手中没有看到 ALPN 信息/协商,所以可能这就是服务器没有回复的原因。

我正在运行标准项目,没有任何修改。定义了 SSL 符号,项目设置为 .net framework 4.5。

我假设构建的 .net 框架版本支持 ALPN,因为这里没有提到任何内容:https ://libraries.io/nuget/M2MqttDotnetCore 。我似乎找不到我的 ALPN 参数的任何问题。

有人对此有任何运气吗?

0 投票
0 回答
736 浏览

ssl - 当使用“tls-alpn-01”挑战让我们使用 traefik 加密 kubernetes 中的证书时,我得到“acme:错误:连接期间 400 超时”

我正在按照教程使用 traefik 作为 Azure Kubernetes 服务 (AKS) 集群的入口和入口控制器。我正在使用 terraform 部署 traefik(版本 1.7.24)掌舵图。

DNS 记录正确指向 AKS 负载均衡器 IP。

当我检查 traefik 日志时,我可以看到“tls-alpn-01”挑战失败并出现以下错误:

完整日志如下:

我什至在 AKS LoadBalancer NSG(防火墙)中添加了“AllowAll”规则。但是 tls-alpn-01 验证仍然面临超时错误。没有生成 ssl 证书,我的网站使用的是默认的 example.com 过期 ssl 证书。

我可以确认 telnet 到 mydomain.tld 的 443 端口也可以正常工作。

PS:我不想对 ssl 证书使用“dns-01”挑战,因为 dns 提供商没有让我们加密的 API。我不能使用“http-01”,因为这些是没有任何 Web 服务器的后端服务器。

任何帮助深表感谢。我也想知道 tls-alpn-01 挑战是如何运作的。

0 投票
0 回答
44 浏览

apache - 哪个是正确的 ALPN 行为?

当我openssl s_client在启用 ALPN 的情况下使用时,以及当我使用没有服务器支持的协议时:

阿帕奇:

现在,当我测试任何其他已知站点/服务器时,例如 nginx 或 google ......

哪个是正确的行为?

0 投票
2 回答
185 浏览

java - 不支持 ALPN - 在 Spring Boot 应用程序中使用 Google pub-sub 消息时出错

我们正在开发一个订阅 Google pub-sub 主题的 Spring Boot 应用程序。下面是我的代码 -

pom.xml 具有 GCP-Spring Boot 相关依赖项

应用程序.yml 文件

定义bean的配置类

这是我的听众课

上面的代码在我的本地系统中对我来说很好。我能够启动我的应用程序、订阅频道、收听我的 ServiceActivator 方法中的消息并能够打印它们。

当我将它们部署到 Azure 云时,能够订阅频道,启动应用程序,但在收听消息时,出现以下异常

根据异常,我怀疑 Java 版本可能存在问题,因此检查了详细信息

我本地系统中的 Java 版本详细信息 -

Azure 中的 Java 版本详细信息 -

有没有可能是Java版本的问题?因为它在本地运行良好,但在 Azure 中运行良好。为什么 ALPN 在使用 GCP 时会出现?如果问题出在不支持 ALPN 的 Java 版本上,那么解决该错误的可能性是什么?

0 投票
1 回答
149 浏览

node.js - HTTP/2 兼容 API,如何处理

虽然最初我决定创建一个仅 HTTP/2 的服务器,但我发现兼容性 API 是一个不错的选择,可以支持不支持或不支持 HTTP/2 的客户端(fetchreact-native?)。

但是,我很难理解如何处理 HTTP/1x 处理程序上的传入请求,即报告req.httpVersion === "2.0"ALPN negotiation section以下代码是文档中的摘录nodejs

首先,我不明白上面的代码应该做什么。就像,我知道它做了什么,但它没有什么特别的——似乎只是通用的 HTTP/1x 请求处理程序,它发送一些 JSON,仅此而已。我错过了什么吗?

除此之外:

  • 一旦 HTTP/1x 处理程序报告req.httpVersion = "2.0",我该怎么办?
    它也会由 HTTP/2 处理程序 ( server.on("stream", ()=>{ ... })) 处理,所以我应该在 HTTP/1x 处理程序中忽略它吗?
  • 如果它不会由 HTTP/2 处理程序自动处理,我可以而且应该手动将请求转发给 HTTP/2 处理程序吗?
  • 如果以上都不是,示例中的响应 JSON 是否在向客户端指示它应该切换到 HTTP/2 方面发挥作用?如果是这样,客户究竟应该怎么做?

抱歉,如果这可能是一个愚蠢的问题,nodejs 文档很糟糕......似乎他们的每一点文档都必须以悬念结束......

0 投票
1 回答
33 浏览

http2 - 服务器通过 http/2 ("h2") 协议建立 TLSv1.3 连接是否必须使用 ALPN?

我知道,如果我们谈论非安全连接,则可以在没有 ALPN 的情况下通过 http/2 协议建立连接。但是 TLS 连接呢?在RFC中说:

这是否意味着服务器和客户端必须使用 ALPN 通过 TLS 和 http2 建立连接?还是有解决方法和其他选择?