다음을 통해 공유


Kestrel: 호환되지 않는 Windows 버전에서 TLS를 통한 HTTP/2 사용 안 함

Windows에서 TLS(전송 계층 보안)를 통한 HTTP/2를 사용하도록 설정하려면 다음 두 가지 요구 사항을 충족해야 합니다.

  • ALPN(Application-Layer Protocol Negotiation) 지원 - Windows 8.1 및 Windows Server 2012 R2부터 제공됩니다.
  • HTTP/2와 호환되는 암호 세트 - Windows 10 및 Windows Server 2016부터 제공됩니다.

따라서 TLS를 통한 HTTP/2가 구성된 경우 Kestrel의 동작이 다음과 같이 변경되었습니다.

  • ListenOptions.HttpProtocolsHttp1AndHttp2로 설정된 경우 Http1로 다운그레이드하고 Information 수준에 메시지를 기록합니다. Http1AndHttp2ListenOptions.HttpProtocols에 대한 기본값입니다.
  • ListenOptions.HttpProtocolsHttp2로 설정된 경우 NotSupportedException을 throw합니다.

자세한 내용은 이슈 dotnet/aspnetcore#23068을 참조하세요.

도입된 버전

ASP.NET Core 5.0

이전 동작

다음 표에서는 TLS를 통한 HTTP/2가 구성된 경우의 동작을 간략하게 설명합니다.

프로토콜 Windows 7,
Windows Server 2008 R2
이하
Windows 8,
Windows Server 2012
Windows 8.1,
Windows Server 2012 R2
Windows 10,
Windows Server 2016,
이상
Http2 NotSupportedException throw TLS 핸드셰이크 중 오류 발생 TLS 핸드셰이크 중 오류 발생 * 오류 없음
Http1AndHttp2 Http1로 다운그레이드 Http1로 다운그레이드 TLS 핸드셰이크 중 오류 발생 * 오류 없음

* 이러한 시나리오를 사용하려면 호환되는 암호 도구 모음을 구성합니다.

새 동작

다음 표에서는 TLS를 통한 HTTP/2가 구성된 경우의 동작을 간략하게 설명합니다.

프로토콜 Windows 7,
Windows Server 2008 R2
이하
Windows 8,
Windows Server 2012
Windows 8.1,
Windows Server 2012 R2
Windows 10,
Windows Server 2016,
이상
Http2 NotSupportedException throw NotSupportedException throw NotSupportedException ** throw 오류 없음
Http1AndHttp2 Http1로 다운그레이드 Http1로 다운그레이드 Http1 **로 다운그레이드 오류 없음

이러한 시나리오를 사용하려면 호환되는 암호 도구 모음을 구성하고 앱 컨텍스트 전환 Microsoft.AspNetCore.Server.Kestrel.EnableWindows81Http2true로 설정합니다.

변경 이유

이 변경은 이전 Windows 버전에서 TLS를 통한 HTTP/2의 호환성 오류가 최대한 빨리 명확히 표시되도록 하기 위한 것입니다.

호환되지 않는 Windows 버전에서 TLS를 통한 HTTP/2가 사용하지 않도록 설정되어 있는지 확인합니다. Windows 8.1 및 Windows Server 2012 R2는 기본적으로 필요한 암호가 없으므로 호환되지 않습니다. 그러나 HTTP/2 호환 암호를 사용하도록 컴퓨터 구성 설정을 업데이트할 수 있습니다. 자세한 내용은 TLS cipher suites in Windows 8.1(Windows 8.1의 TLS 암호 도구 모음)을 참조하세요. 구성한 경우 앱 컨텍스트 스위치 Microsoft.AspNetCore.Server.Kestrel.EnableWindows81Http2를 설정하여 Kestrel에서 TLS를 통한 HTTP/2를 사용하도록 설정해야 합니다. 예시:

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

기본 지원은 변경되지 않았습니다. 예를 들어 TLS를 통한 HTTP/2는 이전에도 Windows 8 또는 Windows Server 2012에서 작동하지 않았습니다. 이 변경으로 이러한 지원되지 않는 시나리오에서 오류가 표시되는 방법이 수정됩니다.

영향을 받는 API

없음