问题标签 [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.
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,所以这不是问题......
jmeter - 使用 JMeter 的 HTTP/2 请求因“nullSession”而失败 (jetty-alpn)
我已经为 JMeter 安装了Blazemeter HTTP/2 插件,但无法让 HTTP/2 请求正常工作。
我的最小测试如下所示:
- 线程组
- HTTP2 请求
- 服务器:stackoverflow.com
- 协议:https
- 查看结果树 Http2
- 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):
nginx - 如何为无 ALPN 客户端配置 Nginx 仅支持 HTTP2
情况如下:我们的客户想要支持一些旧的ios mac系统,它使用的网络库不支持ALPN。我们的服务器设置为只接受 gRPC 请求,因此服务器不需要接受 HTTP1.1 请求。
那么如何禁用 Nginx 以接受 HTTP1.1 请求并仅启用 HTTP2 支持并跳过 ALPN?
我试图让 Nginx 默认支持 http2,但它仍然涉及 ALPN 过程。
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 在引导类路径上吗?
谢谢你的帮助。
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 参数的任何问题。
有人对此有任何运气吗?
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 挑战是如何运作的。
apache - 哪个是正确的 ALPN 行为?
当我openssl s_client
在启用 ALPN 的情况下使用时,以及当我使用没有服务器支持的协议时:
阿帕奇:
现在,当我测试任何其他已知站点/服务器时,例如 nginx 或 google ......
哪个是正确的行为?
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 版本上,那么解决该错误的可能性是什么?
node.js - HTTP/2 兼容 API,如何处理
虽然最初我决定创建一个仅 HTTP/2 的服务器,但我发现兼容性 API 是一个不错的选择,可以支持不支持或不支持 HTTP/2 的客户端(fetch
在react-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 文档很糟糕......似乎他们的每一点文档都必须以悬念结束......
http2 - 服务器通过 http/2 ("h2") 协议建立 TLSv1.3 连接是否必须使用 ALPN?
我知道,如果我们谈论非安全连接,则可以在没有 ALPN 的情况下通过 http/2 协议建立连接。但是 TLS 连接呢?在RFC中说:
这是否意味着服务器和客户端都必须使用 ALPN 通过 TLS 和 http2 建立连接?还是有解决方法和其他选择?