Saltar al contenido

IIS Express toma de forma predeterminada el puerto 44300 para HTTPS al habilitar SSL

Solución:

Esta pregunta ha sido respondida por Divya en los foros de IIS.

Una vez que habilita SSL para un sitio web en WebMatrix, el puerto predeterminado es 44300 y realiza todos los enlaces en segundo plano. Espero que haya intentado cambiar este puerto a 443 en el archivo de configuración. Una vez hecho y guardado, también debe modificar el enlace en http.sys. Debería eliminar la entrada existente para el puerto 44300 y agregar la entrada para el puerto 443. Para hacer esto, puede usar httpcfg (WinXp / Win2003) o ‘netsh http’ (WinVista / Win2K8 / Win7). Estos son los comandos para netsh:

1) Obtenga el appid y certhash para la entrada existente de 44300 (supongo que usará el mismo certificado que WebMatrix instala de forma predeterminada. Si también desea cambiar el certificado, obtenga el hash del certificado del almacén de certificados): netsh http show sslcert. En la salida, busque la entrada para el puerto 44300 y copie certhash y appID.

2) Elimine la entrada para 44300: netsh http delete sslcert ipport=0.0.0.0:44300

3) Agregue una nueva entrada para el puerto 443 con certhash y appID copiados en el paso 1. netsh http add sslcert ipport=0.0.0.0:443 certhash=<certhash> appid=<appid>

Después de configurar la entrada en http.sys, debe reiniciar el servicio http para que los cambios surtan efecto.

net stop http

net start http

Como han señalado otros, hay varias formas agradables de obtener sus certificados SSL.

netsh http show sslcert > output.txt

o (mi método preferido):

netsh http show sslcert | clip

Dado que he dedicado mucho tiempo a este tema, me gustaría compartir mi hallazgo. Estoy volviendo a publicar un segmento de mi otra publicación menos el código. Algunos antecedentes y explicación:

========================================

Después de investigar en voz alta, pude resolver este problema con IIS Express y una anulación del controlador de la clase OnAuthorization método (Ref # 1). También he seguido la ruta recomendada por Hanselman (Ref # 2). Sin embargo, no estaba completamente satisfecho con estas dos soluciones debido a dos razones:

  1. Ref # 1’s OnAuthorization solo funciona a nivel de acción, no a nivel de clase de controlador
  2. Ref # 2 requiere mucha configuración (Win7 SDK para makecert), netsh comandos y, para usar el puerto 80 y el puerto 443, necesito iniciar VS2010 como administrador, lo cual no veo con buenos ojos.

Entonces, se me ocurrió esta solución que es bastante simplista con las siguientes condiciones:

  1. Quiero poder usar el RequireHttps atributo a nivel de acción o clase de controlador

  2. Quiero que MVC use HTTPS cuando el RequireHttps el atributo está presente, y use HTTP si está ausente

  3. No quiero tener que ejecutar Visual Studio como administrador

  4. Quiero poder usar cualquier puerto HTTP y HTTPS asignado por IIS Express

  5. Puedo reutilizar el certificado SSL autofirmado de IIS Express y no me importa si veo el mensaje SSL no válido

=========================================

Puede encontrar mi solución / código aquí ==> ASP.NET MVC RequireHttps solo en producción

El puerto 44300 es secuencial: 00 significa que es la primera aplicación que ha configurado como SSL habilitado; 01 será el segundo y así sucesivamente.

Dado que también requiero que mi sitio web solo funcione en HTTPS agregando el [RequireHttps] atributo global, tuve algunos problemas para depurar. Cuando se lanzó, se redirigía automáticamente a https://localhost/

Para solucionar este problema al depurar un sitio web, Simplemente creo un nuevo RequireHttpsAttribute que especifican el puerto

#if DEBUG
public class RequireHttpsAttribute : System.Web.Mvc.RequireHttpsAttribute
{
    protected override void HandleNonHttpsRequest(System.Web.Mvc.AuthorizationContext filterContext)
    {
        base.HandleNonHttpsRequest(filterContext);

        var result = (RedirectResult)filterContext.Result;

        var uri = new UriBuilder(result.Url);
        uri.Port = 44301;

        filterContext.Result = new RedirectResult(uri.ToString());
    }
}
#endif

Utilice esta clase solo para depurar. Cuando se implementa en IIS7, debe usar la reescritura de URL para redirigir a HTTPS.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *