首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

找不到TLS ALPN提供程序;没有可用的工作netty-tcnative、Conscrypt或Jetty NPN/ALPN

问题概述

“找不到TLS ALPN提供程序;没有可用的工作netty-tcnative、Conscrypt或Jetty NPN/ALPN”这个错误通常出现在使用Netty框架进行TLS通信时,表示无法找到合适的ALPN(Application-Layer Protocol Negotiation)提供程序。ALPN是一种TLS扩展,允许在TLS握手过程中协商应用层协议。

基础概念

  • TLS(Transport Layer Security):一种用于在网络上提供安全通信的协议。
  • ALPN(Application-Layer Protocol Negotiation):TLS扩展,允许在TLS握手过程中协商应用层协议,如HTTP/2、HTTP/1.1等。
  • Netty:一个异步事件驱动的网络应用框架,用于快速开发可维护的高性能协议服务器和客户端。

相关优势

  • 性能:Netty框架的高性能和低延迟特性使其成为高性能网络应用的理想选择。
  • 灵活性:支持多种协议和自定义协议,易于扩展和维护。
  • 社区支持:Netty拥有活跃的社区和丰富的文档资源。

类型

  • netty-tcnative:基于OpenSSL的ALPN实现。
  • Conscrypt:一个用于Java的安全库,支持ALPN。
  • Jetty NPN/ALPN:Jetty提供的NPN和ALPN实现。

应用场景

  • 高并发服务器:如Web服务器、API网关等。
  • 实时通信应用:如WebSocket服务器、聊天应用等。
  • 物联网设备通信:如智能家居设备之间的安全通信。

问题原因

找不到TLS ALPN提供程序的原因可能有以下几种:

  1. 缺少依赖库:没有正确引入netty-tcnative、Conscrypt或Jetty NPN/ALPN的相关依赖库。
  2. 版本不兼容:引入的依赖库版本与Netty版本不兼容。
  3. 配置错误:在代码中配置ALPN提供程序时出现错误。

解决方法

1. 引入正确的依赖库

确保在项目的构建文件中正确引入了netty-tcnative、Conscrypt或Jetty NPN/ALPN的依赖库。例如,使用Maven构建项目时,可以在pom.xml中添加以下依赖:

代码语言:txt
复制
<!-- netty-tcnative -->
<dependency>
    <groupId>io.netty</groupId>
    <artifactId>netty-tcnative</artifactId>
    <version>2.0.46.Final</version>
</dependency>

<!-- Conscrypt -->
<dependency>
    <groupId>org.conscrypt</groupId>
    <artifactId>conscrypt-openjdk-uber</artifactId>
    <version>2.5.2</version>
</dependency>

2. 检查版本兼容性

确保引入的依赖库版本与Netty版本兼容。可以参考Netty官方文档或相关依赖库的文档来确认兼容性。

3. 配置ALPN提供程序

在代码中正确配置ALPN提供程序。例如,使用Conscrypt作为ALPN提供程序时,可以这样配置:

代码语言:txt
复制
import io.netty.handler.ssl.ApplicationProtocolConfig;
import io.netty.handler.ssl.ApplicationProtocolNames;
import io.netty.handler.ssl.SslContext;
import io.netty.handler.ssl.SslContextBuilder;
import io.netty.handler.ssl.util.InsecureTrustManagerFactory;
import org.conscrypt.Conscrypt;

public class TlsServer {
    public static void main(String[] args) throws Exception {
        SslContext sslContext = SslContextBuilder.forServer(keyCertChainFile, keyFile)
            .ciphers(Http2SecurityUtil.CIPHERS, SupportedCipherSuiteFilter.INSTANCE)
            .applicationProtocolConfig(getApplicationProtocolConfig())
            .build();

        // 创建和启动服务器
    }

    private static ApplicationProtocolConfig getApplicationProtocolConfig() {
        return new ApplicationProtocolConfig(
            ApplicationProtocolConfig.Protocol.ALPN,
            ApplicationProtocolConfig.SelectorFailureBehavior.NO_ADVERTISE,
            ApplicationProtocolNames.HTTP_2,
            ApplicationProtocolNames.HTTP_1_1
        );
    }
}

参考链接

通过以上步骤,应该可以解决“找不到TLS ALPN提供程序”的问题。如果问题仍然存在,建议检查日志和配置,确保所有依赖库和配置都正确无误。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

grpc坑之Could not find TLS ALPN provider; no working netty-tcnative

Initialization of bean failed; nestedexception is java.lang.IllegalStateException: Could not find TLS...ALPN provider; no working netty-tcnative, Conscrypt, or Jetty NPN/ALPN available at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean...ALPN provider; no working netty-tcnative, Conscrypt, or Jetty NPN/ALPN available at io.grpc.netty.GrpcSslContexts.defaultSslProvider...,这种情况要么是搞忘记配置,或者没有加载配置,也可能是是配置信息存储在配置中心,且服务中发布到docker容器中且继承了istio,这种是域名相关配置istio还没初始化,从而导致拉取配置失败 第二种:...netty-tcnative相关的maven库没引入 根据grpc对应的版本,有以下对应关系 ?

3K30
  • 网络协议之:加密传输中的NPN和ALPN

    网络协议之:加密传输中的NPN和ALPN 文章目录 简介 SSL/TLS协议 NPN和ALPN 总结 简介 自从HTTP从1.1升级到了2,一切都变得不同了。...今天本文将会跟大家聊一下SSL/TLS协议的扩展NPN和ALPN。...可用的压缩方式清单 我们之前提到了TLS其实是一套加密框架,其中的有些组件其实是可以替换的,这里可用版本号,可用的密码套件清单,可用的压缩方式清单就是向服务器询问对方支持哪些服务。...他们主要用在TLS中,用来协商客户端和服务器端到底应该使用什么应用数据协议进行沟通。 其中NPN是SPDY使用的扩展,而ALPN是HTTP2使用的扩展。 他们两个有什么区别呢?...总结 NPN和ALPN都是TLS的扩展,相较而言,ALPN更加好用。 本文已收录于 http://www.flydean.com/08-ssl-tls-npn-alpn/

    1.4K21

    Nginx优化之-ALPN

    虽然HTTP2没有强制说必须使用加密协议进行传输,但是业界的标准包括各大流行的浏览器都只支持HTTPS情况下的HTTP2协议 那么浏览器在访问 HTTPS 网站时,如何得知服务端是否支持 HTTP/2?...答案是借助 HTTP/2 的协议协商机制:在 HTTP/2 Over HTTP 中,可以使用 HTTP 的 Upgrade 机制进行协商;而对于 HTTP/2 Over TLS,可以使用 TLS 的 NPN...或 ALPN 扩展来完成协商 NPN(Next Protocol Negotiation,下一代协议协商),是一个 TLS 扩展,由 Google 在开发 SPDY 协议时提出。...比NPN少了一个交互的步骤,所以ALPN是推荐的协议 所以,使用ALPN相对于NPN来说,在SSL/TLS交互握手的过程中,减少了一个TTL来回,性能相对有一定的提升 ALPN如何交互?...大部分 Web Server 都依赖 OpenSSL 库提供 HTTPS 服务,对于它们来说,是否支持 NPN 或 ALPN 完全取决于使用的 OpenSSL 版本。

    1.2K30

    谈谈 HTTP2 的协议协商机制

    ALPN 扩展 HTTP/2 协议本身并没有要求它必须基于 HTTPS(TLS)部署,但是出于以下三个原因,实际使用中,HTTP/2 和 HTTPS 几乎都是捆绑在一起: HTTP 数据明文传输,数据很容易被中间节点窥视或篡改...Google 在 SPDY 协议中开发了一个名为 NPN(Next Protocol Negotiation,下一代协议协商)的 TLS 扩展。...随着 SPDY 被 HTTP/2 取代,NPN 也被官方修订为 ALPN(Application Layer Protocol Negotiation,应用层协议协商)。...二者的目标和实现原理基本一致,这里只介绍后者。如图: ? 可以看到,客户端在建立 TLS 连接的 Client Hello 握手中,通过 ALPN 扩展列出了自己支持的各种应用层协议。...支持 HTTP/2 的 Web Server 基本都支持 HTTP/1.1。这样,即使浏览器不支持 HTTP/2,双方也可以协商出可用的 HTTP 版本,没有兼容性问题。

    2.6K20

    深入理解nginx的https alpn机制

    概述   应用层协议协商(Application-Layer Protocol Negotiation,简称ALPN)是一个传输层安全协议(TLS) 的扩展, ALPN 使得应用层可以协商在安全连接层之上使用什么协议...nginx能够在一个ssl监听端口上同时提供http/1.1和http/2的服务,而http/2协议规定是必须基于tls安全通信协议的,因此,nginx在ssl握手过程中实现了ALPN的协议协商功能,能够自动完成和客户端的协议协商...,从而根据客户端的协议支持能力提供http/1.1或者http/2的服务。   ...2.2 通过抓包看一下alpn的细节   下面通过TLS v1.2握手协议来查看alpn的细节,对于TLS v1.3协议,在ServerHello响应的时候由于alpn部分的信息被加密,所以查看起来比较会麻烦...,就是从ssl底层通过SSL_get0_alpn_selected函数获取alpn的选择结果,如果没有获取到,则通过SSL_get0_next_proto_negotiated获取npn的选择结果。

    65610

    nghttp2 - HTTP2 C Library 简明教程(一)

    nghttp2 - HTTP/2 C Library nghttp2 是在C中的超文本传输协议版本2的实现. HTTP/2 的框架层被实现为可重用的C库....最重要的是我们实现了一个HTTP/2客户端,服务器和代理.还为HTTP/2开发了负载测试和基准测试工具. HPACK编码器和解码器可用作公共API。 还有一个实验性的高级C++库....我们有这个库的Python绑定,但是我们还没有完整的代码覆盖. 发展情况 为HTTP/2实现了RFC 7540 HTTP/2和RFC 7541 HPACK-头部压缩....公共测试服务器 以下端点可用来测试nghttp2的实现. https://nghttp2.org/ (TLS + ALPN/NPN) 此端点通过ALPN/NPN支持h2,h2-16,h2-14,和http...针对emacs用户,将clang-format集合到emacs是非常容易的. clang-format.el应该与clang分发, 如果没有发现,请从这里下载,并将这些行添加到你的.emacs文件.

    3.3K120

    腾讯云-Istio案例分析: 端口命名不满足约束导致流量异常

    但 istio 和 k8s 的适配并非完全没有冲突, 一个典型问题就是 istio 需要 k8s service 按照协议进行端口命名(port naming)。...资源定义里并不包括七层协议信息,所以 istio 需要用户显式提供。...TCP 处理 如果是 server 端先发包,协议将按照 TCP 处理 检测 TLS CLIENT_HELLO 如果不是 terminating TLS (通常是应用本身发起的tls/https),...按照 TLS 处理,提取 TLS 中的 SNI 作为 virtual host,进行路由控制 如果 terminating 连接(通常是sidecar 间的 mtls),尝试从 ALPN/NPN 中提取应用层协议...如果没有 ALPN/NPN 信息,会进行下一步,尝试读取应用层的数据,见下 基于常见协议的已知典型结构,尝试检测应用层 plaintext 内容,过程中会设置超时控制和检测包大小限制: 基于HTTP2

    2.8K10

    HTTP2 探索第一篇:概念

    安全 对于大多数人来说,下图的情况几乎都有遇到过(电脑或手机里)。万恶的运营商或者网络接入WiFi提供商劫持我们的网络,修改网络的内容,给我们带来了很大的困扰。...HTTP/2.0 Over TLS版: 客户端向服务器端请求 TLS + ALPN(Application Layer Protocol Negotiation)/NPN 服务器端返回: TLS 握手...ALPN协商过程 参考TLS握手过程图,下面是增加ALPN协商的具体过程: 客户端添加一个ProtocolNameList字段,包含支持的HTTP协议到ClientHello消息中; 服务器端查看ProtocolNameList...False Start 通常情况下,使用ALPN会搭配使用False Start,客户端在完成TLS握手前提前发送加密后的应用数据,将两次RTT TLS握手减少为一次;不过需要同时支持ALPN(NPN已经很少用啦...流量控制的算法没有具体要求使用哪一种,但是大概实现的功能是这样的: 两端收发保有一个流量控制(window)窗口; 发送端每发送一个DATA帧,就把窗口的大小递减,递减量为这个帧的大小,要是窗口大小小于该帧的大小

    3.8K10

    深入OKHttp之TLS

    的连接有这么几个流程: 创建 TLS 套接字 配置 Socket 的加密算法,TLS版本和扩展 强行进行一次 TLS 握手 建立 SSL 会话 校验证书 证书锁定校验 如果成功连接,保存握手和 ALPN...具体的 github 地址是 https://github.com/google/conscrypt 查看他的 getSocketFactory 方法: @Override public SSLSocketFactory...在没有 https 的时候,为了支持一个ip上多个host, 我们可以在header里面去指定 host, 服务端根据不同的host,把请求转发到不同的服务。...Session Ticket 则是客户端保存握手记录 ALPN Application Layer Protocol Negotiation(应用层协议商) ALPN 是客户端发送所支持的 HTTP 协议列表...okhttp在 TLS 握手之后使用连接之前调用此操作。 那么到底啥是 ssl pinner呢? ssl pinner 在 https 中,如果没有做双向校验,我们仍然会有中间人攻击的风险。

    2.4K10

    原来你是这样的http2

    HTTP1.1的80端口设计了upgrade请求头升级到更高级的协议,而443端口为了避免多消耗个网络RTT,在tls握手过程中使用了NPN/ALPN技术直接在通信之前保持CS两端的协议一致。...NPN/ALPN是是TLS协议扩展,其中NPN是Google为实现spdy提出的。由服务端提供可支持的协议,供客户端选择。...如果是自己的源站,那么请确保服务器支持TLS1.2已经RFC7540所要求的加密套件,h2需要保证支持alpn。你可以使用ssllabs等网站检查。...此时的proxy相当于tcp转发的load balance功能的设备。如果该proxy支持tls的alpn协议,那么它也可以选择HTTP代理功能,和h2服务器可以建立加密连接。...同时做了应用层的如TCP的可靠性保障。同时这些TLS1.3传输更快更简洁。这些都为HTTP2.0进化到HTTP3.0提供了一些思路。 总结 以上内容都来源于笔者的实践经验和理论总结。

    2.5K131

    HTTP基础知识知多少

    TLS:Transport Layer Security,安全传输层协议 当前主流的版本是SSL3.0和TLS1.0。 关系图 ?...关系图 HTTP Header的作用 1.从协议层面提供缓存策略 2.与提升速率相关的一些配置 2.1 gzip压缩 支持内容压缩 2.2 Range 支持断点续传 3.其他特殊作用 3.1...华为手机默认安装的根证书 SSL的加密及完整性保护 1.通信线路的加密:SSL或TLS将整个通信线路进行了加密,使用的非对称加密对通信线路进行加密。...目前所有浏览器都支持的方法 session tickets:针对session ID只保留在一台服务器上的缺点而生 2.协议协商 HTTP 1.1的Upgrade ALPN:Application...NPN:Next Protocol Negotiation,随着SPDY 被HTTP/2 取代,NPN 也被修订为ALPN ? Upgrade 参考文献 1.《图解HTTP》; 2.

    76830

    逆向工程分析:iMessage如何利用硬件来保护软件

    写在前面的话 iMessage是苹果生态系统中广泛使用的安全消息应用程序和协议。...由于APN客户端证书对每个设备都是唯一的,并且TLS加密发生在应用层,因此这样可以提供一种更安全的方法。传输层没有加密,因此可能会将证书公开给中间人攻击者。...NPN协议现在改名为了ALPN应用层协议协商,它是一种TLS的扩展,允许在安全连接的基础上进行应用层协议的协商。它可以告诉TLS服务器客户端希望使用哪个应用层协议。...如果省略-alpn或-servername参数,那么就会出现握手失败的情况。 拦截APN消息 现在我们需要截获未加密的TLS消息。在此之前,我们可以通过证书绑定等技术来轻松绕过APN。...参数中的哈希代表的是消息主题或使用了APN的服务。如果没有过滤器消息,客户端就无法通过(0x0a: 发送消息)来发送或接受APN消息了。因此,我们必须在发送消息之前调用过滤器命令。

    3K20

    HTTPS网络安全与SSL证书相关术语合集

    CAA CAA : DNS Certification Authority Authorization,使用DNS来指定该域名可以由哪些CA机构签发证书,这不是为TLS层的安全提供保证,而是作为CA签发证书程序中的一部分...ALPN ALPN(应用层协议协商 Application-Layer Protocol Negotiation) 是一个进行应用层协议协商的传输层安全协议(TLS)扩展,ALPN允许应用层协商应该在安全连接上实行哪个协议...NPN NPN(Next Protocol Negotiation) 下一协议协商,在TLS上允许应用层协商使用哪个协议,在2014年7月11日的RFC 7301中使用ALPN代替NPN H2 HTTP...此问题的原因是在实现TLS的心跳扩展时没有对输入进行适当的验证(缺少边界检查),该程序错误属于缓冲区过读,即可以读取的数据比应该允许读取的还多。 RC4 是一种流加密算法,对称加密,密钥长度可变。...STARTTLS STARTTLS 是对纯文本通信协议(SMTP/POP3/IMAP)的扩展。它提供一种方式将纯文本连接升级为加密连接(TLS或SSL),而不是另外使用一个端口作加密通信。

    1.5K50

    Learn Http with Curl

    Curl 是一个常见的命令行工具,能力非常强大,在大家的工作中很常用,但是完整读过 curl 的 manual 的应该不多。...,而 http1.0 的 keepalive 是 tcp 连接复用,降低创建销毁成本,是应用层实现,一般是秒级别 (比如 10s );另外一个相关的问题:为什么 curl 提供的选项只有 tcp keepalive...关于 20x 和 30x 的区别有一个非常好的图(如下) --negotiate: 使用 Spnego 认证,一种由微软提出的使用GSS-API接口的认证模式 --no-npn --no-alpn: 不使用...npn/alpn 即 Next Protocol Negotiation,npn 现在的版本叫 ALPN 是一种在 tls 握手时顺便进行协议协商的 tls 扩展,具体可以参考这篇文章: 谈谈 HTTP.../2 的协议协商机制 | JerryQu 的小站 --no-sessionid: sessionid 是一种 tls TLS/SSL 会话复用 机制,默认 curl 会使用这种机制,有助于复用 session

    1.5K120

    HTTP2学习笔记

    HTTP2协议 HTTP的1.1的现状: http1.1过于庞大,有很多实现的细枝末节很难彻底实现。导致客户端和服务端的互用性存在问题。 http 1.1很难榨干TCP协议所能提供的所有性能。...http2 http2的前身是SPDY。 基于TLS之上的http2协商 有两个协商协议:SPDY使用NPN,HTTP2使用ALPN。...他们两个的主要区别在于谁来决定通讯协议,ALPN由服务端选择,NPN又客户端选择。基于TLS时,可以不使用Upgrade来升级,而使用TLS的一个扩展来协商。...基于非TLS的http2 会先用一次通讯,客户端给服务端发送升级请求,服务端如果支持会返回“101 Switching”作为回复,则升级成http2,但是现在还没有任何主流浏览器支持非TLS的http2...在请求者请求url之前,需要先确定上游服务器是否支持HTTP2 http的版本协议有两种标识符:h2代表建立在TLS上的HTTP2通讯,h2c代表不适用TLS协议。存在Upgrade。

    52520
    领券