本文へスキップ
ecdsa.com

ALPN(アプリケーション層プロトコルネゴシエーション)

クライアントが h2 や http/1.1 などのアプリケーションプロトコルを提示し、サーバーがハンドシェイク内でそのいずれかを選ぶ RFC 7301 の TLS 拡張で、余分なラウンドトリップが発生しません。
別表記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 は、1 つのポートを共有するプロトコルを区別し、サーバーが未知の値を拒否すれば、ALPACA(2021年)のようなクロスプロトコル攻撃も防ぎます。

ALPN のリストは(ECH を使わない限り)ClientHello の中で暗号化されずに送られ、JA4 などの TLS フィンガープリントの一部になります。openssl s_client -alpn h2,http/1.1 を実行すると、サーバーが何を選択するかを確認できます。

規格と参考文献

すべての用語