TLS: Behavior of ALPN in uTLS

This commit is contained in:
Fangliding
2026-05-15 23:41:30 +08:00
parent 778f201913
commit 9e921ce16c
3 changed files with 24 additions and 9 deletions
+8 -3
View File
@@ -142,9 +142,14 @@ CipherSuites 用于配置受支持的密码套件列表, 每个套件名称之
:::
::: tip
当使用此功能时,TLS 的部分影响TLS指纹的选项将被 utls 库覆盖不再生效,列如ALPN
会被传递的参数有
`"serverName" "disableSystemRoot" "pinnedPeerCertSha256" "masterKeyLog"`
当使用此功能时,TLS 的部分影响TLS指纹的选项将被 utls 库覆盖不再生效。
会被传递的参数有`"serverName" "disableSystemRoot" "pinnedPeerCertSha256" "masterKeyLog"`
针对 ALPN 则有特殊行为。
默认强制使用最常见的 `h2,http/1.1` 作为 ALPN。对于 WebSocket 和 HttpUpgrade 传输则默认使用 `http/1.1`, 否则协商到 `h2` 会导致无法连接,但允许手动设置到 `h2,http/1.1`,如果确信服务器支持使用这个 ALPN 完成握手。
如果 ECH 启用,则 outer 无论如何都会显示为 `h2,http/1.1`,而 inner 如果是 WebSocket 或 HttpUpgrade 则会强制置 `http/1.1` 以便完成握手,其他协议则会尊重用户配置的 ALPN。
:::
> `pinnedPeerCertSha256`: string
+8 -3
View File
@@ -140,9 +140,14 @@ This feature only **simulates** the `TLS Client Hello` fingerprint. Behavior and
:::
::: tip
When this feature is enabled, some TLS options that affect TLS fingerprints are overridden by the uTLS library and stop taking effect, such as ALPN.
The parameters still passed through are:
`"serverName" "disableSystemRoot" "pinnedPeerCertSha256" "masterKeyLog"`
When this feature is enabled, some TLS options that affect TLS fingerprints are overridden by the uTLS library and stop taking effect.
The parameters still passed through are: `"serverName" "disableSystemRoot" "pinnedPeerCertSha256" "masterKeyLog"`.
ALPN has special behavior.
By default, the most common `h2,http/1.1` is forced as ALPN. For WebSocket and HttpUpgrade transports, `http/1.1` is used by default — otherwise negotiating to `h2` would prevent the connection from succeeding — but you may manually set it to `h2,http/1.1` if you are sure the server supports completing the handshake with this ALPN.
If ECH is enabled, the outer ALPN is always shown as `h2,http/1.1`. The inner ALPN is forced to `http/1.1` for WebSocket or HttpUpgrade transports to allow the handshake to complete; for other protocols the user-configured ALPN is honored.
:::
> `pinnedPeerCertSha256`: string
+8 -3
View File
@@ -140,9 +140,14 @@ TLS — это обычный механизм защиты транспорта
:::
::: tip
При использовании этой функции некоторые TLS-параметры, влияющие на отпечаток, будут перезаписаны библиотекой uTLS и перестанут действовать, например ALPN.
Параметры, которые все равно передаются:
`"serverName" "disableSystemRoot" "pinnedPeerCertSha256" "masterKeyLog"`
При использовании этой функции некоторые TLS-параметры, влияющие на отпечаток, будут перезаписаны библиотекой uTLS и перестанут действовать.
Параметры, которые все равно передаются: `"serverName" "disableSystemRoot" "pinnedPeerCertSha256" "masterKeyLog"`.
Для ALPN действует особое поведение.
По умолчанию принудительно используется самый распространенный `h2,http/1.1`. Для транспортов WebSocket и HttpUpgrade по умолчанию используется `http/1.1`, иначе согласование `h2` приведет к невозможности подключения. При желании можно вручную установить `h2,http/1.1`, если вы уверены, что сервер поддерживает завершение рукопожатия с таким ALPN.
Если включен ECH, внешний ALPN всегда отображается как `h2,http/1.1`. Внутренний ALPN для WebSocket и HttpUpgrade принудительно устанавливается в `http/1.1`, чтобы рукопожатие могло завершиться; для остальных протоколов соблюдается заданный пользователем ALPN.
:::
> `pinnedPeerCertSha256`: string