Bagikan melalui


Kestrel: HTTP/2 dinonaktifkan melalui TLS pada versi Windows yang tidak kompatibel

Untuk mengaktifkan HTTP/2 melalui Keamanan Lapisan Transportasi (TLS) pada Windows, dua persyaratan perlu dipenuhi:

  • Dukungan Negosiasi Protokol Lapisan Aplikasi (ALPN), yang tersedia dimulai dengan Windows 8.1 dan Windows Server 2012 R2.
  • Sekumpulan sandi yang kompatibel dengan HTTP/2, yang tersedia dimulai dengan Windows 10 dan Windows Server 2016.

Dengan demikian, perilaku Kestrel ketika HTTP/2 melalui TLS dikonfigurasi telah berubah menjadi:

  • Turunkan ke Http1 dan catat pesan di Information tingkat saat ListenOptions.HttpProtocols diatur ke Http1AndHttp2. Http1AndHttp2 adalah nilai default untuk ListenOptions.HttpProtocols.
  • NotSupportedException Lempar kapan ListenOptions.HttpProtocols diatur ke Http2.

Untuk diskusi, lihat masalah dotnet/aspnetcore#23068.

Versi yang diperkenalkan

ASP.NET Core 5.0

Perilaku yang lama

Tabel berikut menguraikan perilaku saat HTTP/2 melalui TLS dikonfigurasi.

Protokol Windows 7,
Windows Server 2008 R2,
atau yang lebih lama
Windows 8,
Windows Server 2012
Windows 8.1
Windows Server 2012 R2
Windows 10,
Windows Server 2016,
atau yang lebih baru
Http2 Melemparkan NotSupportedException Kesalahan selama jabat tangan TLS Kesalahan selama jabat tangan TLS * Tidak ada kesalahan
Http1AndHttp2 Turunkan tingkat ke Http1 Turunkan tingkat ke Http1 Kesalahan selama jabat tangan TLS * Tidak ada kesalahan

* Konfigurasikan cipher suite yang kompatibel untuk mengaktifkan skenario ini.

Perilaku yang baru

Tabel berikut menguraikan perilaku saat HTTP/2 melalui TLS dikonfigurasi.

Protokol Windows 7,
Windows Server 2008 R2,
atau yang lebih lama
Windows 8,
Windows Server 2012
Windows 8.1
Windows Server 2012 R2
Windows 10,
Windows Server 2016,
atau yang lebih baru
Http2 Melemparkan NotSupportedException Melemparkan NotSupportedException Melemparkan NotSupportedException ** Tidak ada kesalahan
Http1AndHttp2 Turunkan tingkat ke Http1 Turunkan tingkat ke Http1 Turunkan tingkat ke Http1 ** Tidak ada kesalahan

** Konfigurasikan suite sandi yang kompatibel dan atur sakelar Microsoft.AspNetCore.Server.Kestrel.EnableWindows81Http2 konteks aplikasi ke true untuk mengaktifkan skenario ini.

Alasan untuk berubah

Perubahan ini memastikan kesalahan kompatibilitas untuk HTTP/2 melalui TLS pada versi Windows yang lebih lama muncul sedini mungkin dan sejelas mungkin.

Pastikan HTTP/2 melalui TLS dinonaktifkan pada versi Windows yang tidak kompatibel. Windows 8.1 dan Windows Server 2012 R2 tidak kompatibel karena tidak memiliki sandi yang diperlukan secara default. Namun, dimungkinkan untuk memperbarui pengaturan Konfigurasi Komputer untuk menggunakan cipher yang kompatibel dengan HTTP/2. Untuk informasi selengkapnya, lihat suite sandi TLS di Windows 8.1. Setelah dikonfigurasi, HTTP/2 melalui TLS di Kestrel harus diaktifkan dengan mengatur sakelar Microsoft.AspNetCore.Server.Kestrel.EnableWindows81Http2konteks aplikasi . Misalnya:

AppContext.SetSwitch("Microsoft.AspNetCore.Server.Kestrel.EnableWindows81Http2", true);

Tidak ada dukungan yang mendasar yang berubah. Misalnya, HTTP/2 melalui TLS tidak pernah berfungsi pada Windows 8 atau Windows Server 2012. Perubahan ini memodifikasi bagaimana kesalahan dalam skenario yang tidak didukung ini disajikan.

API yang Terpengaruh

Tidak ada