He buscado en Google y StackOverflow tratando de encontrar una solución a esto, pero todos parecen estar relacionados con ASP.NET, etc.
Normalmente ejecuto Linux en mis servidores, pero para este cliente estoy usando Windows con IIS 7.5 (y Plesk 10). Esta es la razón por la que no estoy familiarizado con los archivos IIS y web.config . En un .htaccess
archivo puede usar condiciones de reescritura para detectar si el protocolo es HTTPS y redirigir en consecuencia. ¿Hay una manera simple de lograr esto usando un archivo web.config, o incluso usando el módulo ' URL Rewrite ' que he instalado?
No tengo experiencia con ASP.NET, así que si esto está involucrado en la solución, incluya pasos claros sobre cómo implementarlo.
La razón por la que hago esto con web.config y no PHP es que me gustaría forzar HTTPS en todos los activos dentro del sitio.
Respuestas:
Necesita el módulo URL Rewrite, preferiblemente v2 (no tengo v1 instalado, así que no puedo garantizar que funcione allí, pero debería).
Aquí hay un ejemplo de tal web.config: forzará HTTPS para TODOS los recursos (usando 301 redireccionamiento permanente):
PD: Esta solución en particular no tiene nada que ver con ASP.NET/PHP o cualquier otra tecnología, ya que se hace utilizando solo el módulo de reescritura de URL, se procesa en uno de los niveles iniciales / inferiores, antes de que la solicitud llegue al punto donde su código se ejecuta
fuente
Strict-Transport-Security
encabezado: en.wikipedia.org/wiki/HTTP_Strict_Transport_Security<action type="Redirect" url="https://{HTTP_HOST}{REQUEST_URI}" redirectType="Permanent" appendQueryString="false" />
<match url=".*"/>
a<match url="http://*.*" />
Para aquellos que usan ASP.NET MVC. Puede usar RequireHttpsAttribute para forzar que todas las respuestas sean HTTPS:
Otras cosas que también puede hacer para ayudar a proteger su sitio:
Forzar tokens antifalsificación para usar SSL / TLS:
Requerir que las cookies requieran HTTPS de forma predeterminada cambiando el archivo Web.config:
Use el paquete NWebSec.Owin NuGet y agregue la siguiente línea de código para habilitar Strict Transport Security (HSTS) en todo el sitio. No olvide agregar la directiva de precarga a continuación y enviar su sitio al sitio de precarga de HSTS . Más información aquí y aquí . Tenga en cuenta que si no está utilizando OWIN, hay un método Web.config que puede leer en el sitio NWebSec .
Use el paquete NWebSec.Owin NuGet y agregue la siguiente línea de código para habilitar la fijación de clave pública (HPKP) en todo el sitio. Más información aquí y aquí .
Incluya el esquema https en cualquier URL utilizada. El encabezado HTTP de la Política de seguridad de contenido (CSP) y la Integridad de recursos secundarios (SRI) no funcionan bien cuando se imita el esquema en algunos navegadores. Es mejor ser explícito sobre HTTPS. p.ej
Use la plantilla de proyecto ASP.NET MVC Boilerplate Visual Studio para generar un proyecto con todo esto y mucho más integrado. También puede ver el código en GitHub .
fuente
Para aumentar la respuesta de LazyOne, aquí hay una versión anotada de la respuesta.
Borre todas las demás reglas que ya se hayan definido en este servidor. Cree una nueva regla, que llamaremos "Redirigir todas las solicitudes a https". Después de procesar esta regla, ¡no procese más reglas! Coincide con todas las URL entrantes. Luego verifique si todas estas otras condiciones son verdaderas: HTTPS está APAGADO. Bueno, esa es solo una condición (pero asegúrese de que sea verdad). Si es así, envíe una redirección 301 permanente al cliente en
http://www.foobar.com/whatever?else=the#url-contains
. ¡No agregue la cadena de consulta al final de eso, porque duplicaría la cadena de consulta!Esto es lo que significan las propiedades, los atributos y algunos de los valores.
MatchAll
) o si alguna de las condiciones debe ser verdadera (MatchAny
); similar a AND vs OR.match
y suconditions
son todos verdaderos.redirect
(del lado del cliente) orewrite
(del lado del servidor).https://
con dos variables de servidor.url
; en este caso, lo estamos configurando como falso, porque{REQUEST_URI}
ya lo incluye.Las variables del servidor son
{HTTPS}
que es ya seaOFF
oON
.{HTTP_HOST}
eswww.mysite.com
y{REQUEST_URI}
incluye el resto del URI, p. ej./home?key=value
#fragment
(ver comentario de LazyOne).Ver también: https://www.iis.net/learn/extensions/url-rewrite-module/url-rewrite-module-configuration-reference
fuente
/home?key=value#fragment
) no está configurado en el servidor por los navegadores, ya que está destinado a ser utilizado localmente.http://www.example.com/members#oops
, se enviará la solicitud a lahttp://www.example.com/members
que luego se redirige a la versión HTTPS enhttps://www.example.com/members
- el navegador hace el resto)La respuesta aceptada no funcionó para mí. Seguí los pasos en este blog .
Un punto clave que me faltaba era que necesitaba descargar e instalar la herramienta de reescritura de URL para IIS. Lo encontré aquí . El resultado fue el siguiente.
fuente
En .Net Core, siga las instrucciones en https://docs.microsoft.com/en-us/aspnet/core/security/enforcing-ssl
En su startup.cs agregue lo siguiente:
Para redirigir Http a Https, agregue lo siguiente en startup.cs
fuente
La excelente biblioteca NWebsec puede actualizar sus solicitudes de HTTP a HTTPS utilizando su
upgrade-insecure-requests
etiqueta dentro deWeb.config
:fuente
No se me permitió instalar URL Rewrite en mi entorno, así que encontré otra ruta.
Al agregar esto a mi web.config, se agregó el error de reescritura y funcionó en IIS 7.5:
Luego, siguiendo los consejos aquí: https://www.sslshopper.com/iis7-redirect-http-to-https.html
Creé el archivo html que hace la redirección (redirectToHttps.html):
Espero que alguien encuentre esto útil ya que no pude encontrar todas las piezas en un lugar en ningún otro lugar.
fuente
Una manera simple es decirle a IIS que envíe su archivo de error personalizado para solicitudes HTTP. El archivo puede contener un meta redireccionamiento, un redireccionamiento de JavaScript e instrucciones con un enlace, etc. Es importante destacar que aún puede marcar "Requerir SSL" para el sitio (o carpeta) y esto funcionará.
fuente