Oprogramowanie pośredniczące: Oprogramowanie pośredniczące przekierowania HTTPS zgłasza wyjątek dla niejednoznacznych portów HTTPS
W programie ASP.NET Core 6.0 oprogramowanie pośredniczące przekierowania HTTPS zgłasza wyjątek typu InvalidOperationException , gdy znajdzie wiele portów HTTPS w konfiguracji serwera. Komunikat wyjątku zawiera tekst "Nie można określić portu https z IServerAddressesFeature, odnaleziono wiele wartości. Ustaw żądany port jawnie na httpsRedirectionOptions.HttpsPort".
Aby zapoznać się z dyskusją, zobacz problem z usługą GitHub dotnet/aspnetcore#29222.
Wprowadzona wersja
ASP.NET Core 6.0
Stare zachowanie
Gdy oprogramowanie pośredniczące przekierowania HTTPS nie jest jawnie skonfigurowane przy użyciu portu, wyszukuje IServerAddressesFeature je podczas pierwszego żądania w celu określenia portu HTTPS, do którego ma zostać przekierowany.
Jeśli nie ma portów HTTPS ani wielu różnych portów, nie jest jasne, który port powinien być używany. Oprogramowanie pośredniczące rejestruje ostrzeżenie i wyłącza się. Żądania HTTP są przetwarzane normalnie.
Nowe zachowanie
Gdy oprogramowanie pośredniczące przekierowania HTTPS nie jest jawnie skonfigurowane przy użyciu portu, wyszukuje IServerAddressesFeature
je podczas pierwszego żądania w celu określenia portu HTTPS, do którego ma zostać przekierowany.
Jeśli nie ma portów HTTPS, oprogramowanie pośredniczące nadal rejestruje ostrzeżenie i wyłącza się. Żądania HTTP są przetwarzane normalnie. To zachowanie obsługuje:
- Scenariusze programowania bez protokołu HTTPS.
- Hostowane scenariusze, w których protokół TLS został zakończony przed dotarciem do serwera.
Jeśli istnieje wiele różnych portów, nie jest jasne, który port powinien być używany. Oprogramowanie pośredniczące zgłasza wyjątek i kończy się niepowodzeniem żądania HTTP.
Przyczyna wprowadzenia zmiany
Ta zmiana uniemożliwia obsługiwanie potencjalnie poufnych danych za pośrednictwem niezaszyfrowanych połączeń HTTP, gdy protokół HTTPS jest znany jako dostępny.
Zalecana akcja
Aby włączyć przekierowywanie HTTPS, gdy serwer ma wiele różnych portów HTTPS, należy określić jeden port w konfiguracji. Aby uzyskać więcej informacji, zobacz Konfiguracja portu.
Jeśli nie potrzebujesz oprogramowania pośredniczącego przekierowania HTTPS w aplikacji, usuń je UseHttpsRedirection
z Startup.cs.
Jeśli musisz dynamicznie wybrać prawidłowy port HTTPS, prześlij opinię w temacie Problem z usługą GitHub dotnet/aspnetcore#21291.