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>


27 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. ¡Gracias a ti!

      ¡Un saludo!

      Xavi.

      Eliminar
    3. 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
  4. Hola Xavi buen dia:

    Antes que nada muchisimas gracias por esta valiosa ayuda, la cual resulta muy util para nosostros como administradores de infraestructura de TI.

    Poseo una aplicacion web en IIS 8 a la cual se accede con la URL http://subdominio.midominio.com/applweb

    A este sitio le he instalado un certificado SSL y requiero que al ingresar dicha URL se redireccione a https://subdominio.midominio.com/applweb

    Segui tus instrucciones al pie de la letra para hacer el redireccionamiento pero no me funciona. Sera porque la URL no inicia con www?? Tiene que ver algo con la coincidencia en el pattern=^[^www]??

    Te agradezco enormemente si me puedes ayudar en como debo configurar correctamente la regla para este tipo de direccionamiento.

    Saludos...

    ResponderEliminar
    Respuestas
    1. Efectivamente.

      Tal y como indicas, el la regla de reescritura, tenes que cambiar el www por el subdominio.

      Un saludo,

      Xavi.

      Eliminar
    2. Hola Xavi:

      Hice las modificaciones del caso y ya me funciona perfectamente. Quedo asi:


















      Muchisimas gracias por tu guia. Saludos...

      Eliminar
    3. ¡Perfecto!

      ¡Me alegro que te haya funcionado!

      Un saludo,

      Xavi.

      Eliminar
  5. Hola Xavi:

    Excelente artículo, como siempre, muy útil.

    La duda que me surge a mí es que tengo que redirigir de HTTP a HTTPS una web que no utiliza los puertos estándar. El HTTP entra por el 8050 y el HTTPS por el 9050. ¿Cómo le indico los puertos?

    Muchas gracias y te deseo que este 2018 venga cargado de muchos artículos útiles com siempre.

    Un saludo.

    ResponderEliminar
    Respuestas
    1. Hola Jose,

      Muchas gracias por tus palabras.

      Te contesto a tu pregunta:

      Con la reescritura de URL con el url-rewrite no veo la forma de hacerlo.

      Si haces un cambio de puertos, te aconsejaría de utilizar la redirección en ves de la reescritura.

      Un saludo,

      Xavi.

      Eliminar
  6. Hola Xavi.

    Ok.

    Muchísimas gracias.


    Un saludo.

    ResponderEliminar
  7. Hola buenas tardes, mi dificulta radica enque la redireccion funciona si escribes en el navegadro midominio.com pero si escribo www.midominio.com no hace la redireccion, sabes a que se debe?
    Saludos!

    ResponderEliminar
    Respuestas
    1. Hola,

      Con el método explicado en este post, se tiene en cuenta el caso en el que no hay las www.

      Revisa el código del web.config y compáralo con el de este post.

      Un saludo,

      Xavi.

      Eliminar
  8. Hola buenas, ya se que este post es algo antiguo, pero necesitaría ayuda con lo siguiente:
    Tengo un servicio web en un servidor iis hasta ahora todo http, pero uno de los metodos nuevos que son susceptibles de invocarse me piden que sea https, ¿existe alguna manera de redirigir solo esa llamada?
    Muchas gracias

    ResponderEliminar
    Respuestas
    1. Hola,

      Sí, claro, no hay problema. En el apartado "add input" puedes colocar la URL que quieras.

      Un saludo,

      Xavi.

      Eliminar
  9. ¿Qué se puede hacer si comparto código entre un sitio SSL y uno no-SSL?

    ResponderEliminar
    Respuestas
    1. Hola,

      Se podría pero complicaría bastante las reglas a configurar.

      Lo ideal sería aplicar la reescritura a HTTPs en el sito sin SSL para convertirlo a un sitio que se puede llamar con SSL, después reconfigurar las llamadas al sitio SSL.

      Un saludo,

      Xavi.

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

    Excelente, me solucionó un problemón. Gracias

    ResponderEliminar