ミドルウェア:HTTPS リダイレクト ミドルウェアがあいまいな HTTPS ポートで例外をスローする

ASP.NET Core 6.0 で HTTPS リダイレクト ミドルウェアによって、サーバー構成で複数の HTTPS ポートが検出されると、InvalidOperationException 型の例外がスローされます。 この例外メッセージには、"値が複数見つかり、IServerAddressesFeature から https ポートを判別できません。 希望のポートを HttpsRedirectionOptions.HttpsPort に明示的に設定してください。" というテキストが含まれます。

ディスカッションについては、GitHub イシュー dotnet/aspnetcore#29222 を参照してください。

導入されたバージョン

ASP.NET Core 6.0

以前の動作

HTTPS リダイレクト ミドルウェアにポートが明示的に構成されていない場合、最初の要求時に IServerAddressesFeature が検索され、リダイレクト先の HTTPS ポートが決定されます。

HTTPS ポートがない場合、または個別のポートが複数ある場合は、どのポートを使用すべきか判別できません。 ミドルウェアが警告をログし、自身を無効にします。 HTTP 要求は正常に処理されます。

新しい動作

HTTPS リダイレクト ミドルウェアにポートが明示的に構成されていない場合、最初の要求時に IServerAddressesFeature が検索され、リダイレクト先の HTTPS ポートが決定されます。

HTTPS ポートがない場合は、ミドルウェアが警告をログ記録し、自身を無効にします。 HTTP 要求は正常に処理されます。 この動作では、次がサポートされます。

  • HTTPS を使用しない開発シナリオ。
  • サーバーに到達する前に TLS が終了するホストされるシナリオ。

個別のポートが複数ある場合は、どのポートを使用すべきか判別できません。 ミドルウェアが例外をスローし、HTTP 要求は失敗します。

変更理由

この変更により、HTTPS が使用できることがわかっているときに、機密である可能性があるデータが、暗号化されていない HTTP 接続を介して送信されなくなります。

サーバーに個別の HTTPS ポートが複数ある場合に HTTPS リダイレクトを有効にするには、構成でポートを 1 つ指定する必要があります。 詳細については、「ポート構成」を参照してください。

お使いのアプリで HTTPS リダイレクト ミドルウェアが不要な場合は、Startup.cs から UseHttpsRedirection を削除します。

正しい HTTPS ポートを動的に選択する必要がある場合は、GitHub のイシュー dotnet/aspnetcore#21291 にフィードバックを提供してください。

影響を受ける API

HttpsPolicyBuilderExtensions.UseHttpsRedirection