Middleware: El middleware de redireccionamiento de HTTPS inicia una excepción en puertos HTTPS ambiguos

En ASP.NET Core 6.0, el middleware de redireccionamiento de HTTPS inicia una excepción de tipo InvalidOperationException cuando encuentra varios puertos HTTPS en la configuración del servidor. El mensaje de la excepción contiene el texto "No se puede determinar el puerto https de IServerAddressesFeature, pero se han encontrado varios valores. Establezca el puerto deseado explícitamente en HttpsRedirectionOptions.HttpsPort".

Para obtener información, vea la incidencia de GitHub n.º 29222 (dotnet/aspnetcore).

Versión introducida

ASP.NET Core 6.0

Comportamiento anterior

Cuando el middleware de redireccionamiento de HTTPS no se configura explícitamente con un puerto, busca IServerAddressesFeature durante la primera solicitud para determinar el puerto HTTPS al que debe realizar el redireccionamiento.

Si no hay puertos HTTPS o hay varios distintos, no queda claro cuál se debe usar. El middleware registra una advertencia y se deshabilita a sí mismo. Las solicitudes HTTP se procesan con normalidad.

Comportamiento nuevo

Cuando el middleware de redireccionamiento de HTTPS no se configura explícitamente con un puerto, busca IServerAddressesFeature durante la primera solicitud para determinar el puerto HTTPS al que debe realizar el redireccionamiento.

Si no hay ningún puerto HTTPS, el middleware sigue registrando una advertencia y se deshabilita a sí mismo. Las solicitudes HTTP se procesan con normalidad. Este comportamiento admite lo siguiente:

  • Escenarios de desarrollo sin HTTPS.
  • Escenarios hospedados en los que se termina TLS antes de llegar al servidor.

Si hay varios puertos distintos, no queda claro cuál se debe usar. El middleware inicia una excepción y se produce un error en la solicitud HTTP.

Motivo del cambio

Este cambio impide la entrega de datos potencialmente confidenciales mediante conexiones HTTP sin cifrar en aquellos casos en los que se sabe que HTTPS está disponible.

Para habilitar el redireccionamiento HTTPS cuando el servidor tiene varios puertos HTTPS distintos, debe especificar un puerto en la configuración. Para obtener más información, vea Configuración de puertos.

Si no necesita el middleware de redireccionamiento de HTTPS en la aplicación, quite UseHttpsRedirection de Startup.cs.

Si tiene que seleccionar el puerto HTTPS correcto de forma dinámica, proporcione comentarios en la incidencia de GitHub n.º 21291 (dotnet/aspnetcore).

API afectadas

HttpsPolicyBuilderExtensions.UseHttpsRedirection