Redirigir de HTTP a HTTPS (IIS)

TEORÍA

Cuando queremos que todas las peticiones HTTP a un dominio concreto de nuestro servidor IIS vayan por un socket seguro, debemos reescribir la URL para que sea HTTPS (redirigir no es válido ya que provocaría un bucle infinito en el cual el servidor redirigirá constántemente a «https://www.example.com»).

PRÁCTICA

Para lograr esto, primero hay que instalar una extensión para reescribir la URL de la petición llamada «URL Rewrite» y luego configurarla (a través de la GUI o a través del archivo del configuración del dominio concreto).

INSTALAR EXTENSIÓN «URL Rewrite»

Lo primero es descargar e instalar esta extensión que se puede encontrar en la dirección https://www.iis.net/downloads/microsoft/url-rewrite.

Tras instalarlo, debería aparecernos en el subpanel principal de cualquier sitio web del administrador de IIS una nueva opción llamada «Reescritura de dirección URL«:

ESTABLECER REGLA DE REESCRITURA

Se pueden establecer reglas a través de la interfaz gráfica del administrador del IIS o a través de un archivo de configuración local para el dominio (archivo «web.config«).

A TRAVÉS DE GUI

Accedemos a la extensión instalada (Reescritura de dirección URL) en el subpanel principal del sitio (virtual host) al que querámos establecer la regla de reescritura.

Una vez aquí, dentro del subpanel derecho (Acciones) usamos la acción «Agregar reglas…» y seleccionamos, dentro del listado que nos aparecerá, la opción «Regla en blanco«.

Se nos abrirá un nuevo menú en el subpanel principal donde debemos rellenar con los siguientes campos:

Cuadro «Coincidir dirección URL»:

  • Dirección URL solicitada => Coincide con el patrón.
  • Usando => Expresiones regulares
  • Patrón => (.*)

Cuadro «Condiciones»:

  • Agrupación lógica => Coincide con todas
  • Agregar =>
    • Entrada de condición => {HTTPS}
    • Comprobar si la cadena de entrada => Coincide con el patrón
    • Patrón => ^OFF$

Cuadro «Acción»:

  • Tipo de acción => Redirigir
  • Redirigir dirección URL => https://{HTTP_HOST}/{R:1}
  • Anexar cadena de consulta => true
  • Tipo de redirección => Ver otro (303)

A TRAVÉS DE web.config

Si queremos aplicar reglas de reescritura de la URL desde el archivo de configuración en lugar de usar la GUI (el resultado es el mismo), dentro del archivo «web.config» del sitio que estamos configurando, debe existir el nodo «rewrite» dentro del contexto del documento XML que se muestra a continuación:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <system.webServer>
    <rewrite>
      <rules>
        <rule name="To HTTPS" stopProcessing="true">
          <match url="(.*)" />
          <conditions>
            <add input="{HTTPS}" pattern="^OFF$" />
          </conditions>
          <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" redirectType="SeeOther" />
        </rule>
      </rules>
    </rewrite>
  </system.webServer>
</configuration>

 

Como se puede observar, los valores son los mismos que se emplean en la GUI (solo que este método es más rápido haciendo copy-paste en tu archivo de configuración).

TROUBLESHOOTING

P: Al instalar el módulo de reescritura de URL no se muestra en la ventana del panel de control del IIS

S: Cierra y vuelve a abrir el panel, el módulo se debería cargar entonces.

P: El módulo de escritura no redirige.

S: Es posible que sea debido a una mala instalación del módulo. Normalmente se detecta cuando existe el archivo

%Systemroot%/system32/inetsrv/rewrite.dll

Pero el archivo de configuración del IIS no tiene el siguiente nodo incluido en el siguiente archivo:

Archivo:

%Systemroot%/system32/inetsrv/config/applicationHost.config

Nodo:

<globalModules>
...
    <add name="RewriteModule" image="%SystemRoot%\system32\inetsrv\rewrite.dll" />
...
</globalModules>

Añadir dicho nodo manualmente con el «notepad» en modo Administrador (no se debe añadir con otro programa de edición de texto) puede solventar el problema.

También se puede intentar reparar desde el Panel de Control -> Programas y características -> Desinstalar o cambiar un programa; buscándo el «Módulo URL Rewrite X de IIS», abriendo el menú contextual (click derecho) y pulsar en reparar.

Si nada de esto funciona, desinstala el módulo, borra cualquier regla de reescritura que hubieses creado en los archivos «web.config» o a través de la GUI del panel de control del IIS (antes de desinstalar el módulo) e intenta instalar otra versión del módulo de reescritura. En el propio link de descarga de microsoft puedes encontrar otras versiones del módulo, pero también puedes verlas en https://www.iis.net/downloads/microsoft/url-rewrite#additionalDownloads. Asegúrate de selecionar la descarga que más se ajuste a tu servidor IIS (idioma y bits del SO).

Deja un comentario