HttpSys 預設啟用 TLS 通道綁定令牌暴露

在 ASP.NET Core 11 中,Microsoft.AspNetCore.Server.HttpSys啟動時無條件配置 URL 群組HttpServerChannelBindProperty。 此舉透過新 ITlsConnectionFeature.TryGetChannelBindingBytes API 向應用程式開放 RFC 5929 端點 TLS 通道綁定令牌(CBT),啟用擴展認證保護(EPA)情境。

所推出的版本

.NET 11

以前的行為

HttpSys 支援的伺服器在啟動時沒有設定 HttpServerChannelBindProperty URL 群組,且 RFC 5929 TLS 通道綁定令牌也未暴露給應用程式。

應用程式可透過啟用 Microsoft.AspNetCore.Server.HttpSys.EnableCBTHardeningAppContext 切換方式選擇加入。 那個開關把硬化等級設成 Medium,但沒有觸發 HTTP_CHANNEL_BIND_SECURE_CHANNEL_TOKEN 標記,所以 http.sys 沒有提供每個請求的 CBT。

ITlsConnectionFeature 無法取回那個代幣。 唯一相關的 API 是現已過時 ITlsTokenBindingFeature的 ,這是另一個無關的功能。

新行為

HttpSysOptions 有一個新的屬性 HttpAuthenticationHardeningLevel ,型別 HttpAuthenticationHardeningLevel 為 (Legacy, Medium, Strict),預設為 Medium。

啟動時,HttpSys 無條件呼叫 HttpSetUrlGroupProperty , HttpServerChannelBindProperty並套用已設定的硬化層級。 對於 Medium 和 Strict,它也會設定 HTTP_CHANNEL_BIND_SECURE_CHANNEL_TOKEN 旗標,使得 http.sys 每個請求 HTTP_REQUEST_CHANNEL_BIND_STATUS都交付一個 。

新系統 ITlsConnectionFeature.TryGetChannelBindingBytes(ChannelBindingKind kind, out ReadOnlyMemory<byte> channelBindingToken) 會在經過認證的 HTTPS 請求時回傳端點 CBT(RFC 5929 tls-server-end-point)。

若 HttpSetUrlGroupProperty 呼叫失敗(例如在舊核心或阻塞核心上),該失敗會被記錄並繼續啟動。 應用程式運作得就像 Legacy 是被設定好的一樣。

破壞性變更的類型

此變更為行為變更。

變更原因

此變更將 RFC 5929 端點通道綁定暴露於認證中介軟體,使其能實作認證擴展保護(EPA)。 EPA 會以密碼學方式綁定 Kerberos、NTLM 或 Negotiate 認證至底層 TLS 通道,以減緩認證中繼攻擊。 過去,沒有任何 ASP.NET Core 伺服器會將 CBT 暴露給受管理程式碼。

更多資訊請參見 dotnet/aspnetcore#67436。

大部分的使用者不需要採取任何動作。 新的 API 採用選擇加入制。 不呼叫 TryGetChannelBindingBytes 的應用程式仍會產生少量每次請求的成本:透過 Medium 硬化(預設),http.sys 會為每個 HTTPS 請求擷取通道綁定令牌,並將其包含在交付給使用者模式的請求資訊中,這會增加少量核心工作量,並增加約 40 個請求的額外位元組。 對於一般工作負載來說,開銷可以忽略不計,但絕非零。 需要完全移除該功能的應用程式可以透過設定 HttpAuthenticationHardeningLevel.Legacy 來選擇退出(見下方程式碼片段)。

要恢復 .NET 11 之前的行為,請將硬化等級設為Legacy:

builder.WebHost.UseHttpSys(options =>
{
    options.HttpAuthenticationHardeningLevel = HttpAuthenticationHardeningLevel.Legacy;
});

當 Legacy 設定 時,HttpSys 不會設定 CBT 標誌,http.sys 不會填充 HTTP_REQUEST_CHANNEL_BIND_STATUS,並 TryGetChannelBindingBytes 返回 false。

HttpServerChannelBindProperty自 Windows 7 年起 http.sys 支援,Windows Server 2008 R2(2009 年 10 月 22 日發行),該版本低於任何支援 ASP.NET Core版本的作業系統底線。 支援 ASP.NET Core 的作業系統則不受影響。

受影響的 API

  • Microsoft.AspNetCore.Server.HttpSys.HttpSysOptions.HttpAuthenticationHardeningLevel (新)
  • Microsoft.AspNetCore.Server.HttpSys.HttpAuthenticationHardeningLevel (新枚舉)
  • Microsoft.AspNetCore.Http.Features.ITlsConnectionFeature.TryGetChannelBindingBytes (新的預設介面方式)