HttpSys memungkinkan paparan token pengikatan saluran TLS secara default

Di ASP.NET Core 11, Microsoft.AspNetCore.Server.HttpSys secara tidak bersyarat mengonfigurasi grup URL dengan HttpServerChannelBindProperty saat startup. Ini mengekspos token pengikatan saluran TLS titik akhir (CBT) RFC 5929 ke aplikasi melalui API baru ITlsConnectionFeature.TryGetChannelBindingBytes , memungkinkan skenario Extended Protection for Authentication (EPA).

Versi yang diperkenalkan

.NET 11

Perilaku sebelumnya

Server yang didukung HttpSys tidak dikonfigurasi HttpServerChannelBindProperty pada grup URL saat startup, dan token pengikatan saluran TLS RFC 5929 tidak terekspos ke aplikasi.

Aplikasi dapat ikut serta dengan mengaktifkan sakelar Microsoft.AspNetCore.Server.HttpSys.EnableCBTHardeningAppContext . Sakelar tersebut mengatur tingkat pengerasan ke Medium, tetapi tidak mengatur HTTP_CHANNEL_BIND_SECURE_CHANNEL_TOKEN bendera, jadi http.sys tidak mengirimkan CBT per permintaan.

ITlsConnectionFeature tidak memiliki cara untuk mengambil token. Satu-satunya API terkait adalah sekarang usang ITlsTokenBindingFeature, yang merupakan fitur yang berbeda dan tidak terkait.

Perilaku baru

HttpSysOptions memiliki properti HttpAuthenticationHardeningLevelHttpAuthenticationHardeningLevel jenis baru (Legacy, Medium, ) Strictyang default ke Medium.

Saat startup, HttpSys secara tidak bersyarat memanggil HttpSetUrlGroupProperty dengan HttpServerChannelBindProperty, menerapkan tingkat pengerasan yang dikonfigurasi. Untuk Medium dan Strict, ini juga mengatur HTTP_CHANNEL_BIND_SECURE_CHANNEL_TOKEN bendera sehingga http.sys memberikan per permintaan HTTP_REQUEST_CHANNEL_BIND_STATUS.

Yang baru ITlsConnectionFeature.TryGetChannelBindingBytes(ChannelBindingKind kind, out ReadOnlyMemory<byte> channelBindingToken) mengembalikan CBT titik akhir (RFC 5929 tls-server-end-point) pada permintaan HTTPS yang diautentikasi.

HttpSetUrlGroupProperty Jika panggilan gagal (misalnya, pada kernel lama atau yang diblokir), kegagalan dicatat dan startup berlanjut. Aplikasi berjalan seolah-olah Legacy dikonfigurasi.

Jenis perubahan yang memutus kompatibilitas

Perubahan ini adalah perubahan perilaku.

Alasan perubahan

Perubahan ini mengekspos pengikatan saluran titik akhir RFC 5929 ke middleware autentikasi sehingga dapat menerapkan Extended Protection for Authentication (EPA). EPA secara kriptografi mengikat Kerberos, NTLM, atau Menegosiasikan autentikasi ke saluran TLS yang mendasar, mengurangi serangan relai autentikasi. Sebelumnya, tidak ada server ASP.NET Core yang mengekspos CBT ke kode terkelola.

Untuk informasi selengkapnya, lihat dotnet/aspnetcore#67436.

Tidak ada tindakan yang diperlukan untuk sebagian besar pengguna. API baru adalah keikutsertaan. Aplikasi yang tidak memanggil TryGetChannelBindingBytes masih dikenakan biaya per permintaan kecil: dengan Medium pengerasan (default), http.sys menangkap token pengikatan saluran untuk setiap permintaan HTTPS dan menyertakannya dalam info permintaan yang diserahkan ke mode pengguna, yang menambahkan sejumlah kecil pekerjaan kernel dan sekitar 40 byte tambahan per permintaan. Overhead dapat diabaikan untuk beban kerja umum tetapi bukan nol. Aplikasi yang perlu menghilangkannya sepenuhnya dapat memilih keluar dengan mengatur HttpAuthenticationHardeningLevel.Legacy (lihat cuplikan kode di bawah).

Untuk memulihkan perilaku pra-.NET 11, atur tingkat pengerasan ke Legacy:

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

Ketika Legacy dikonfigurasi, HttpSys tidak mengatur bendera CBT, http.sys tidak mengisi HTTP_REQUEST_CHANNEL_BIND_STATUS, dan TryGetChannelBindingBytes mengembalikan false.

HttpServerChannelBindPropertytelah didukung di http.sys sejak Windows 7 dan Windows Server 2008 R2 (dirilis 22 Oktober 2009), yang berada di bawah lantai OS untuk versi ASP.NET Core yang didukung. Tidak ada OS yang didukung ASP.NET Core yang terpengaruh.

API yang Terpengaruh

  • Microsoft.AspNetCore.Server.HttpSys.HttpSysOptions.HttpAuthenticationHardeningLevel (baru)
  • Microsoft.AspNetCore.Server.HttpSys.HttpAuthenticationHardeningLevel (enum baru)
  • Microsoft.AspNetCore.Http.Features.ITlsConnectionFeature.TryGetChannelBindingBytes (metode antarmuka default baru)