Buscar

Windows: IIS redirigir http a https

En muchos entornos con servidores web, nos puede interesar redirigir todas las peticiones HTTP a HTTPs. 

Un caso reciente es con el navegador Firefox, desde un formulario HTTP donde se envía una contraseña, nos encontraremos con un aviso:


"Esta conexión no es segura. Las credenciales introducidas aquí pueden verse  comprometidas"

Windows: IIS redirigir http a https

Debido a las nuevas características incorporadas en las recientes versiones de los navegadores más utilizados como: Chrome, Firefox, Internet Explorer, Edge, entre otros.

Como solución al problema, algunos administradores de sistemas están optando por pasar todo el site de HTTP (80) a HTTPs (443).

La idea de la redirección sería que todas las URLs quedasen convertidas a HTTPs.

Por ejemplo:

http://www.sysadmit.com -> https://www.sysadmit.com

http://www.sysadmit.com/hola -> https://www.sysadmit.com/hola

http://sysadmit.com -> https://www.sysadmit.com

Para realizar este cambio, necesitaremos reescribir todas las URLs.

Mención especial con el cambio indicado de color verde.

No solo estamos cambiando http por https si no que también estamos cambiando el FQDN (fully qualified domain name), de esta manera, según el ejemplo anterior, podemos utilizar un certificado digital con el FQDN: *.sysadmit.com o bien www.sysadmit.com y no tendremos que añadir: sysadmit.com como nombre alternativo en el certificado.

En este post, veremos el detalle de cómo configurar una redirección de HTTP a HTTPs utilizando el servidor web que integra Windows Server: IIS (Internet Information Services).

Veamos cómo redirigir http a https con IIS:


En primer lugar, necesitaremos descargar e instalar la herramienta URL Rewrite:

http://www.iis.net/downloads/microsoft/url-rewrite

La versión actual de URL Rewrite es compatible con las siguientes versiones de IIS (Internet Information Services): IIS 7, IIS 7.5, IIS 8, IIS 8.5, IIS 10.

Dicho de otra forma, la versión mínima de Windows Server donde funcionará la versión actual (mayo 2017) de URL Rewrite es: Windows Server 2008.

Para saber la versión de IIS instalada, podemos utilizar alguno de estos métodos:

Windows: IIS cómo saber la versión instalada (SYSADMIT.com)

Una vez instalado el componente, veamos cómo sería la configuración del ejemplo anterior vía GUI.

Redirigir http a https con IIS desde GUI

Si nos situamos sobre el site y pulsamos sobre el apartado: "URL Rewrite", configuraremos lo siguiente:

Windows: IIS redirigir http a https

Windows: IIS redirigir http a https


1) Rojo: Nombre de la regla

2) Azul: "Match URL":

Requested URL: Seleccionamos "Matches the pattern".

Using: Seleccionamos: "Regular Expressions".

Pattern: Indicamos: "(.*)" y marcamos la opción "Ignore case".

3) Verde: "Conditions":

Primera regla:

Input: {HTTP_HOST}
Type: "Matches the Pattern"
Pattern: ^[^www]

Segunda regla:

Input: {HTTPS}
Type: "Matches the Pattern"
Pattern: off

4) Naranja: "Action"

Action type: "Redirect"

Action properties:

Redirect URL: https://www.sysadmit.com/{R:1}

Marcamos la opción: "Append query string"

Redirect type: Permanent (301).


Redirigir http a https con IIS con el fichero web.config

A partir de Windows Server 2008, la configuración de un site de IIS se guarda en un fichero con el nombre web.config en el directorio donde está situado el site.

Las configuraciones que realizamos desde GUI, se van guardando en el fichero web.config, por tanto, si editamos el fichero, podremos realizar la conguración anterior añadiendo el siguiente código:


<rewrite>
    <rules>
    <clear />
       <rule name="Force WWW and SSL" enabled="true" stopProcessing="true">
    <match url="(.*)" />
    <conditions logicalGrouping="MatchAny">
        <add input="{HTTP_HOST}" pattern="^[^www]" />
        <add input="{HTTPS}" pattern="off" />
    </conditions>
    <action type="Redirect" url="https://www.sysadmit.com/{R:1}" appendQueryString="true" redirectType="Permanent" />
</rule>
</rules>
</rewrite>


11 comentarios:

  1. Gracias por la información, pero en IIS existe una opción "Redirección HTTP", se puede utilizar esa opción? y si es el caso, cómo? MIL GRACIAS!

    ResponderEliminar
    Respuestas
    1. Hola Elizabeth,

      Muy buena pregunta para complementar la información del post.

      La opción que indicas como: "Redirección HTTP" es distinta a la que se explica en este post.

      La diferencia principal es que la "Redirección HTTP", es el lado cliente el que redirije (el navegador), mientras que con "IIS rewrite" (el método explicado en el post), es el IIS (servidor web) que redirige.

      La redirección con "IIS rewrite", al realizarse desde el lado servidor, no se es notificada la redirección al cliente (navegador web).

      ¿Cómo configurar la redirección de HTTP a HTTPS con la "Redirección HTTP" de IIS?

      En primer lugar deberías crear otro site con HTTPS con tu web.

      Después, en el site con HTTP (sin SSL), configuras la redirección.

      Para ello, puedes editar el fichero de configuración del site: web.config

      Especial cuidado con este fichero ya que contiene la configuración del site, una mala edición del mismo, podría provocar que el site no se inicie correctamente. Hay una copia de seguridad del mismo antes de editar.

      En el interior del fichero web.config, te sitúas entre: y

      Entre estos apartados, insertas el siguiente código (indicamos a modo de ejemplo, el site https://sysadmit.com como destino de la redirección):

      En el código, al indicar "Permanent", se le indica al navegador el código HTTP: 302. (Redirección permanente)

      Si quisieras deshabilitar la redirección, bastaría con substituir el código anterior, por este:

      Un saludo,

      Xavi.

      Eliminar
    2. En el texto anterior, falta completar:

      Esto:

      "En el interior del fichero web.config, te sitúas entre: y"

      por esto:

      "En el interior del fichero web.config, te situas entre: system.webServer y system.webServer"

      Un saludo,

      Xavi.

      Eliminar
  2. como hacer para que una pagina en especial no se redirija y si todo el sitio
    yo tengo una pagina que se llama submit.aspx y me gustaria que no se redirija porque se pierden los datos del post

    ResponderEliminar
    Respuestas
    1. Hola,

      Como verás en el post, para realizar la redirección, se utiliza URL Rewrite, así que es posible hacer excepciones.

      Dentro de el apartado conditions, puedes añadir algo similar a esto, entre corchetes, siguiendo la misma sintaxis que los otros add input:

      add input="{REQUEST_URI}" matchType="Pattern" patternSyntax="Wildcard" pattern="/submit.aspx.aspx" ignoreCase="true" negate="true"

      Un saludo,

      Xavi.

      Eliminar
  3. Hola, muchas gracias por el post. Tengo una pregunta, para el método del código en webconfig, cómo sería el pattern para un subdominio, por ejemplo, "algo.midominio.com" a "https://algo.midominio.com". Intenté como está (con ^[^www]) pero no funciona. Saludos y gracias nuevamente.

    ResponderEliminar
    Respuestas
    1. Hola Mauri,

      Te debería de funcionar substituyendo "www" por el "algo".

      Un saludo,

      Xavi.

      Eliminar