跳到主要内容
ecdsa.com

ALPN(应用层协议协商)

RFC 7301 定义的 TLS 扩展:客户端提供 h2、http/1.1 等应用层协议,服务器在握手中从中选择一个,从而省去一次额外的往返。
其他写法Application-Layer Protocol NegotiationALPNh2acme-tls/1

已注册的标识符包括 http/1.1、h2(HTTP/2)、h3(基于 QUIC 的 HTTP/3)、acme-tls/1(ACME tls-alpn-01)、smtp、imap、dot(DNS over TLS)和 postgresql。基于 TLS 的 HTTP/2 必须使用 ALPN;服务器如果不选择 h2,客户端就只能退回 HTTP/1.1。ALPN 还能区分共用同一端口的协议;如果服务器拒绝未知的取值,还能阻止 ALPACA(2021年)等跨协议攻击。

ALPN 列表在 ClientHello 中以明文传输(除非使用了 ECH),也是 JA4 等 TLS 指纹的组成部分。openssl s_client -alpn h2,http/1.1 可以显示服务器选择了哪个协议。

标准与参考资料

全部术语