IIS7: HTTP-> HTTPS limpiamente

146

¿Hay una manera limpia de redirigir todos los intentos de ir a una versión HTTP: // de un sitio a su equivalente HTTPS: //?

cpuguru
fuente
La respuesta se puede encontrar en el blog de James Kovac: jameskovacs.com/2007/05/09/…
cpuguru
Si está en IIS 7 y en R2 aquí hay una guía que funciona y la más "limpia"
Ujwal Parker

Respuestas:

177

Creo que la forma más limpia es como se describe aquí en IIS-aid.com . Es solo web.config y, por lo tanto, si cambia de servidor, no tiene que recordar todos los pasos que siguió con la página de error personalizada 403.4 u otros permisos especiales, simplemente funciona.

<configuration>
  <system.webServer>
    <rewrite>
      <rules>
        <rule name="HTTP to HTTPS redirect" stopProcessing="true">
          <match url="(.*)" />
            <conditions>
              <add input="{HTTPS}" pattern="off" ignoreCase="true" />
            </conditions>
            <action type="Redirect" redirectType="Permanent" url="https://{HTTP_HOST}/{R:1}" />
        </rule>
      </rules>
    </rewrite>
  </system.webServer>
</configuration>
toxaq
fuente
9
Esto funcionó para mí con la excepción de que tuve que modificar la URL de redireccionamiento a https: // {HTTP_HOST} {REQUEST_URI}
Andrew S
66
Esto también funcionó para mí. Tuve que agregar la aplicación que estaba ejecutando en ... localhost / app1 => http: // {HTTP_HOST} / app1 / {R: 1}
RealSollyM
15
Para cualquiera que no tenga una sección de reescritura, coloque las reglas en las siguientes secciones de web.config: <system.webServer><rewrite> <rules> ... </rules> </rewrite> </ system .webServer>
raider33
16
asegúrese de que el módulo de reescritura de URL de Microsoft esté instalado en el servidor IIS
Iman
77
Por razones de SEO, debe usar redirectType = "Permanente". Revise support.google.com/webmasters/answer/…
Niels Bosma
14

La solución más fácil y limpia que encontré fue

  1. En Configuración SSL -> requiere SSL

  2. En Páginas de error -> En error 403.4 -> Redirigir al sitio HTTPS

  3. En Páginas de error -> Editar configuración de características ... -> Establecer errores detallados para solicitudes locales y páginas de error personalizadas para solicitud remota

El beneficio es que no requiere líneas adicionales de código. Lo malo es que te redirige a una URL absoluta.

ColacX
fuente
1
funciona perfectamente (en IIS 8.5 / 2012 R2). y no jugar con la web.config
schmendrick
¿Podría dar un ejemplo de este inconveniente? ¿En qué circunstancias sucedería y por qué es algo negativo? Si pudieras agregarlo a tu respuesta, sería genial. ¡Muchas gracias!
Marcos Dimitrio
2
@MarcosDimitrio No estoy seguro ya que fue hace mucho tiempo. pero creo que cuando quise decir que te redirige a una url absoluta, quise decir una "url base". Por ejemplo, "http": //mywebsite.com/hellokitty se redirigiría a "https": //mywebsite.com perdiendo así cierta información de ruta, esto rompería todos los enlaces existentes con información de ruta adicional.
ColacX
5

Una forma limpia cambia solo el esquema de URL de http -> https y deja todo lo demás equivalente. Debe estar del lado del servidor para que no haya problemas con el navegador.

JPPinto.com tiene instrucciones paso a paso sobre cómo se hace esto, excepto que usan javascript (HttpRedirect.htm) en lugar de una redirección del lado del servidor. Por alguna razón, no pude hacer que IE ejecute javascript si tiene habilitado 'Mostrar mensajes de error HTTP amigables', que está activado de forma predeterminada. Otra cosa con el script es que la redirección a la ruta no funcionó incluso en FF o Chrome. El script siempre redirige a root. (Tal vez me haya perdido algo, porque debería redirigir a la ruta).

Por estas razones, he usado una página ASP para la redirección. La desventaja es que esto requiere que ASP clásico esté habilitado en el servidor.

OpsanBlog tiene un script ASP e instrucciones que funcionan bien con IIS6.

He tenido algunos problemas al usar este método con IIS7. Problemas de interfaz de usuario en su mayoría, ya que IIS7 hace que sea realmente fácil perderse algo.

  • Primero, necesita instalar ASP como una función de rol de servidor web.
  • En segundo lugar, el uso de un directorio virtual no funcionó como se esperaba en IIS7 y no intenté depurar esto. En cambio, puse el archivo en la carpeta raíz del sitio y usé la url '/SSLRedirect.asp' en la página de error 403.4 para hacer referencia a él.
  • Por último, la parte más complicada, NO debe aplicar SSL para SSLRedirect.asp . De lo contrario, obtendrá un error 403.4. Para hacer esto, elija el archivo en 'Vista de contenido' de IIS7 y cambie a 'Vista de características' para poder editar la configuración de SSL para el archivo único y deshabilitar la casilla de verificación 'Requerir SSL'.

El administrador de IIS debe mostrar el nombre del archivo en el encabezado.

mika
fuente
1
Las instrucciones vinculadas en JPPinto.com se han actualizado para resaltar que esto no funciona en IIS 7.5 o R2. Dicen que obtendrá una violación de bloqueo debido a cambios en la seguridad en las versiones más recientes de IIS. Sugieren usar el método URL Rewrite 2.0 en su lugar (enfoque similar según la respuesta de @toxaq).
Robert Shattock
0

Global.asax

protected void Application_BeginRequest()
{
if (!Context.Request.Url.AbsoluteUri.Contains("localhost") && !Context.Request.IsSecureConnection)
Response.Redirect(Context.Request.Url.ToString().Replace("http:", "https:"));
}
Kit de herramientas
fuente
1
Puedo evitar fácilmente esta redirección colocando "localhost" en algún lugar del URI, por ejemplo, la cadena de consulta yourdomain.com?localhost=true . Sugeriría que compruebe la propiedad Request.Url.Host en su lugar
Aidy J
0

Utilizo asp clásico (intranet) y en las páginas que requieren inicio de sesión, el archivo de inicio de sesión incluye la redirección:

if Request.ServerVariables("SERVER_PORT_SECURE") <> "1" or Request.ServerVariables("HTTPS") <> "on" then 
    Response.Redirect "https://" & Request.ServerVariables("SERVER_NAME") & Request.ServerVariables("URL")
end if

Por supuesto, esto no incluye datos GET o POST. En efecto, es una redirección limpia a su página segura.

Jean-Marc
fuente
-4

Creo que con "limpiamente" quieres decir como con una redirección 300. Configuración para muchos servidores e idiomas aquí .

slipsec
fuente