¿Es malo redirigir http a https?


247

Acabo de instalar un certificado SSL en mi servidor.

Luego configuró una redirección para todo el tráfico en mi dominio en el Puerto 80 para redirigirlo al Puerto 443.

En otras palabras, todo mi http://example.comtráfico ahora se redirige a la https://example.comversión adecuada de la página.

La redirección se realiza en mi archivo Apache Virtual Hosts con algo como esto ...

RewriteEngine on
ReWriteCond %{SERVER_PORT} !^443$
RewriteRule ^/(.*) https://%{HTTP_HOST}/$1 [NC,R,L] 

Mi pregunta es, ¿hay algún inconveniente en usar SSL?

Dado que este no es un redireccionamiento 301, ¿perderé el jugo / clasificación de enlaces en los motores de búsqueda al cambiar a https?

Agradezco la ayuda Siempre quise configurar SSL en un servidor, solo por la práctica de hacerlo, y finalmente decidí hacerlo esta noche. Parece estar funcionando bien hasta ahora, pero no estoy seguro de si es una buena idea usar esto en cada página. Mi sitio no es comercio electrónico y no maneja datos confidenciales; es principalmente por su apariencia y la emoción de instalarlo para aprender.


NÚMERO ACTUALIZADO

Extrañamente, Bing crea esta captura de pantalla desde mi sitio ahora que está usando HTTPS en todas partes ...

ingrese la descripción de la imagen aquí


12
[WTF - No puedo agregar respuesta (aunque parece que tengo suficiente representante).] Mi respuesta sería (en parte) que A VECES ES MALO . Considere pasar una clave COOKIE o API en un GET sobre HTTP. Si su sitio redirige las solicitudes HTTP a las solicitudes HTTPS, estas llamadas funcionarían, pero la clave COOKIE o API se transmitiría de forma clara y expuesta. Algunas API desactivan HTTP, un enfoque más sólido: no hay HTTP, por lo que ni siquiera puede hacerlo funcionar a menos que use HTTPS. Ejemplo: "Todas las solicitudes de API deben realizarse a través de HTTPS. Las llamadas realizadas a través de HTTP simple fallarán" de stripe.com/docs/api?lang=php#authentication
codingoutloud

8
@codingoutloud: la alternativa es que todo sucede a través de HTTP sin HTTPS. ¿Cómo es eso mejor?
Mark Henderson

3
@BenCrowell, eso se debe a que un portal cautivo se parece mucho a un sslstripataque de redireccionamiento de estilo (ambos son secuestros de solicitud de intermediario), por lo que los navegadores conscientes de HSTS los bloquearán a ambos.
Jeffrey Hantin

3
tenga en cuenta que el uso de https significa que todo lo que incluya también debería ser https o podría no cargarse, por ejemplo, cargar jquery usando src="://example.com/jquery.js", tenga en cuenta la falta httpo httpsel navegador carga el apropiado. Tuve una pesadilla al intentar que algunas cosas de Amazon incrustadas se cargaran correctamente ya que la API (cargada a través de https) produjo enlaces http, lo que significa que no funcionaron correctamente hasta que encontré el parámetro indocumentado para alternar enlaces https
Básico

3
Jason su actualización debería ser una nueva pregunta, probablemente en Webmasters ya que no está relacionada (técnicamente) con su pregunta original. Pero es probable que sus hojas de estilo provengan de un dominio inseguro.
Mark Henderson

Respuestas:


316

La [R]bandera por sí sola es una 302redirección ( Moved Temporarily). Si realmente desea que las personas utilicen la versión HTTPS de su sitio (sugerencia: lo hace), entonces debería utilizar [R=301]una redirección permanente:

RewriteEngine on
RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^/(.*) https://%{HTTP_HOST}/$1 [NC,R=301,L] 

A 301mantiene intactos todos sus pageranks de google-fu y de esfuerzo . Asegúrese de que mod_rewriteesté habilitado:

a2enmod rewrite

Para responder a su pregunta exacta:

¿Es malo redirigir http a https?

Diablos no. Es muy bueno.


3
Gracias por la información, mi jefe me dice que la razón por la que solo ejecuta https en ciertas páginas de su sitio, es porque usa muchos más recursos del servidor para ejecutarlo en cada página. ¿Sabes algo de eso o si eso es cierto?
JasonDavis

99
@jasondavis Solo si no pasas unos minutos para optimizarlo .
Michael Hampton

10
"Utiliza muchos más recursos del servidor para ejecutarlo en cada página". Las CPU modernas tienen funciones de aceleración de cifrado que hacen que SSL sea casi gratis. No te preocupes por los gastos generales.
Adam Davis

41
@AdamDavis El algoritmo criptográfico puede ser ligero, pero la sobrecarga de protocolo de enlace todavía existe. Además, HTTPS evita que los servidores proxy HTTP almacenen en caché su contenido. En la mayoría de los casos, la sobrecarga de HTTPS es mínima y vale la pena, pero tenga cuidado con la generalización excesiva.
200_success

66
Elimina el almacenamiento en caché compartido, que es útil para los patrones de uso de algunos sitios, y a menudo protege poco (¿es importante que las personas puedan saber que visitó el sitio, pero no los detalles de lo que hizo? Esa es la única situación en la que SSL es útil). La principal ventaja de SSL en cada recurso no es que necesite "seguridad", por ejemplo, personas que miran "acerca de nosotros", sino que no puede fallar y no usarlo en el caso en que debería hacerlo.
Jon Hanna

49

Si bien apoyo la idea de sitios solo SSL, diría que un inconveniente son los gastos generales dependiendo del diseño de su sitio. Quiero decir, por ejemplo, si publica muchas imágenes individuales en etiquetas img, esto podría hacer que su sitio funcione mucho más lento. Aconsejaría a cualquiera que use servidores solo SSL para asegurarse de que funcionan en lo siguiente.

  1. Verifique todo el sitio en busca de enlaces internos y asegúrese de que todos estén usando HTTPS si especifica su propio nombre de dominio en los enlaces, de modo que no esté causando sus propios redireccionamientos.
  2. Actualice su <meta property="og:url"para usar la versión https de su dominio.
  3. Si usa <base href=nuevamente, actualice para usar HTTPS.
  4. Instale el protocolo SPDY si es posible
  5. Asegúrese de utilizar sprites de imágenes CSS cuando sea posible, para reducir el número de solicitudes.
  6. Actualice sus mapas de sitio para indicar el estado de https, para que las arañas con el tiempo aprendan este cambio.
  7. Cambie las preferencias del Motor de búsqueda como Herramientas para webmasters de Google para preferir HTTPS
  8. Siempre que sea posible, descargue cualquier medio estático a los servidores HTTPS CDN.

Si se aborda lo anterior, dudo que tenga muchos problemas.


SPDY es una buena sugerencia; allí incluso parece ser un módulo de añadir soporte para SPDY Apache 2.x .
Calrion

18
El uso de "//yourserver.com/some-uri" en lugar de " yourserver.com/some-uri " resuelve el problema (1) porque el navegador elegirá el esquema apropiado (http o https) dependiendo del esquema con el que se cargó la página .
MauganRa

1
@MauganRa A menos que, por supuesto, sea un enlace desde la página del artículo http a la página de inicio de sesión https, por ejemplo.
Mołot

44
Google ve la URL que alguien está visitando a través del Refererencabezado. Por ejemplo, este sitio usa jQuery del CDN de Google y mi navegador envía una solicitud a Google cada vez que recargo el sitio. De este modo, Referertambién se envía un encabezado a Google que se establece en la URL de este sitio. Por lo tanto, Google puede rastrear los sitios que visito durante el tiempo en que mi dirección IP no cambia (y si uso un servicio de Google durante este tiempo, Google también puede conectar esta información con mi cuenta de Google).
Stephan Kulla

1
Para 1) Acabo de buscar y reemplazar en mi base de datos MySQL http a https ... Estoy usando WordPress, por lo que fue muy fácil actualizar cientos de enlaces
JasonDavis

38

Si configuró https, debería usarlo en todas partes del sitio. Evitará el riesgo de problemas de contenido mixto y, si tiene las herramientas necesarias, ¿por qué no hacer que todo el sitio sea seguro?

En cuanto a la redirección de http a https, la respuesta no es tan simple.

La redirección hará que sea mucho más fácil para sus usuarios, simplemente escriben whateversite.com y se redirige a https.

Pero. ¿Qué sucede si el usuario a veces se encuentra en una red no segura (o está cerca de Troy Hunt y su Pineapple )? Luego, el usuario solicitará http://whateversite.com por viejo hábito. Eso es http. Eso puede verse comprometido. La redirección podría apuntar a https://whateversite.com.some.infrastructure.long.strange.url.hacker.org . Para un usuario común parecería bastante legítimo. Pero el tráfico puede ser interceptado.

Por lo tanto, tenemos dos requisitos que compiten aquí: ser fácil de usar y seguro. Afortunadamente, hay un remedio llamado encabezado HSTS . Con él puedes habilitar la redirección. El navegador se moverá al sitio seguro, pero gracias al encabezado HSTS también lo recuerda. Cuando el usuario escribe en whateversite.com sentado en esa red no segura, el navegador irá a https de inmediato, sin saltar a través de la redirección a través de http. A menos que trate con datos muy confidenciales, creo que es una compensación justa entre seguridad y usabilidad para la mayoría de los sitios. (Cuando configuré recientemente una aplicación que maneja registros médicos, fui a https sin redireccionamiento). Lamentablemente, Internet Explorer no es compatible con HSTS ( fuente), por lo que si su público objetivo utiliza principalmente IE y los datos son confidenciales, es posible que desee deshabilitar los redireccionamientos.

Entonces, si no está apuntando a usuarios de IE, continúe y use la redirección, pero habilite también el encabezado HSTS.


Más personas también deben prestar atención a esto. Otra cosa es que las personas asumen que son seguras porque el punto final es HTTPS, ignorando el hecho de que toda la información enviada a la página en GET o POST está en texto plano.
Velox

3
@Velox: no creo que la implicación de "las personas asuman que son seguras porque el punto final es HTTPS, ignorando el hecho de que toda la información enviada a la página en GET o POST está en texto plano" es bastante precisa. Si bien hay algunos problemas, los parámetros de consulta GET no viajan en claro durante el transporte a través de HTTPS. Consulte, por ejemplo: stackoverflow.com/questions/323200/… Las cargas útiles POST también están protegidas, aunque tampoco son vulnerables a los encabezados de registro y referencia.
codingoutloud

@codingoutloud Ese es mi punto. Sobre HTTPS están encriptados, pero en la solicitud inicial a la página HTTP no lo estaban.
Velox

1
@Velox: si todo el sitio está redirigiendo a HTTPS, entonces es poco probable que se envíe algún parámetro GET antes de que HTTPS se active (y todo permanecerá HTTPS después de ese punto). Todavía hay una solicitud inicial donde se enviarán cookies, que pueden remediarse con HSTS ... y una pequeña ventana de ataque para SSLStrip, que posiblemente podría ser derrotada por JavaScript, pero esa es una carrera armamentística propia.
Brilliand

@Brilliand Fair point, pero un punto débil en seguridad debilita todo. Siempre vale la pena considerarlo.
Velox

22

No hay nada de malo en esto, y de hecho es la mejor práctica (para sitios que deberían ser atendidos a través de una conexión segura). De hecho, lo que estás haciendo es bastante similar a la configuración que estoy usando:

<VirtualHost 10.2.3.40:80>
  ServerAdmin me@example.com
  ServerName secure.example.com
  RedirectMatch 301 (.*) https://secure.example.com$1
</VirtualHost>

# Insert 10.2.3.40:443 virtual host here :)

El 301código de estado indica una redirección permanente , indicando a los clientes capaces de usar la URL segura para conexiones futuras (por ejemplo, actualizar el marcador).

Si solo servirá el sitio a través de TLS / SSL, le recomendaría una directiva adicional para habilitar HTTP Strict Transport Security (HSTS) en su host virtual seguro :

<IfModule mod_headers.c>
  Header set Strict-Transport-Security "max-age=1234; includeSubdomains"
</IfModule>

Este encabezado instruye a los clientes capaces (la mayoría de ellos en estos días, creo) que solo deben usar HTTPS con el dominio proporcionado ( secure.example.com, en este caso) durante los próximos 1234segundos. La ; includeSubdomainsparte es opcional e indica que la directiva se aplica no solo al dominio actual, sino a cualquiera que esté debajo (p alpha.secure.example.com. Ej .). ¡Tenga en cuenta que el encabezado HSTS solo es aceptado por los navegadores cuando se sirve a través de una conexión SSL / TLS!

Para probar la configuración de su servidor con las mejores prácticas actuales, un buen recurso gratuito es el servicio de prueba de servidor SSL de Qualys ; Mi objetivo sería obtener al menos una A- (no se puede obtener más que eso con Apache 2.2 debido a la falta de soporte para la criptografía de curva elíptica).


Debo agregar, enviar el encabezado Strict-Transport-Security: max-age=0negará cualquier directiva anterior; como siempre, esto debe enviarse a través de HTTPS para ser aceptado, pero es una forma práctica de cancelar las cosas si decides que también necesitas usar HTTP en el dominio.
Calrion

5

Guauu ! Redirigir HTTP a HTTPS es algo muy bueno y no puedo ver ningún inconveniente para eso.

Solo asegúrese de que sus clientes tengan la CA correcta para evitar advertencias no amigables para el usuario sobre el certificado en el navegador.

Además, la forma en que configuró Apache para redirigir a HTTPS parece estar bien.


5

¿Es malo redirigir http a https?

No, en absoluto. En realidad, ¡es algo bueno!

En redirecciones:

Podría ser más eficiente, eliminando por completo las reescrituras . Aquí está mi configuración en una situación similar ...

<VirtualHost *:80>
  ServerName domainname.com

  <IfModule mod_alias.c>
    Redirect permanent / https://domainname.com/
  </IfModule>
</VirtualHost>

4

HTTPS no es exactamente infalible. Por supuesto, forzar normalmente HTTPS es algo bueno. Impide que los delincuentes normales hagan algo malo a sus usuarios.

Pero recuerde verificar su configuración SSL como la configuración de SSLCiphers. Deshabilite cosas como RC4 crypto, el protocolo SSLv2 y SSLv3. Además, debe averiguar si las bibliotecas del sistema criptográfico de su sistema son compatibles con TLS1.2 (que es lo que desea tener;))

Encienda SSL, es algo bueno.


La entropía no se agota ( al menos si estás defendiendo contra atacantes basados ​​en la Tierra en lugar de hacer vudú ). O comienzas con una entropía insuficiente, y no puedes hacer nada que requiera aleatoriedad, o comienzas con suficiente entropía, y sigues teniendo suficiente entropía sin importar cuánta aleatoriedad generes.
Gilles

Lo sentimos, lo que ? Hay una serie de operaciones en Linux que insisten en una entropía fuerte derivada del hardware en lugar de una entropía probablemente buena basada en PRNG, y esas pueden bloquearse si la profundidad del grupo es baja. Sin duda, es posible comenzar con suficiente entropía en un sistema Linux, pero mediante el uso excesivo para drenar el grupo, causando el bloqueo de algunas operaciones.
MadHatter

3

Personalmente, estoy totalmente de acuerdo con el uso de SSL para proteger las conexiones en la web, sin embargo, creo que todas las otras respuestas aquí se han perdido es que no todos los dispositivos y piezas de software capaces de una conexión HTTP podrán usar SSL, por lo tanto, consideraría proporcionar alguna forma para que los usuarios lo eviten si no es compatible con ellos. También es posible que las personas en algunos países donde la tecnología de cifrado sea ilegal no puedan acceder a su sitio. Consideraría agregar una página de aterrizaje no cifrada con un enlace para forzar la versión insegura del sitio, pero a menos que un usuario seleccione específicamente hacer lo que usted dijo y simplemente reenviarlo a la versión HTTPS.


Un problema con soluciones como tener una página de aterrizaje HTTP simple, incluso si está separada adecuadamente, es que esta página se deja abierta a la manipulación. Es decir, no hay garantía real de que el enlace para la versión HTTPS del sitio se entregue intacto a los visitantes.
Håkan Lindqvist

3

Estos son algunos de los problemas generales de la pincelada:

  • MITM / SSLSTRIP : esta es una gran advertencia. Si va a servir su sitio a través de HTTPS, desactive HTTP en el sitio . De lo contrario, deja a sus usuarios abiertos a varios ataques de intermediarios, incluido SSLSTRIP, que interceptará las solicitudes y las atenderá silenciosamente a través de HTTP, insertando su propio script de malware en la transmisión. Si el usuario no se da cuenta, pensará que su sesión es segura cuando en realidad no lo es.

    • Sin embargo, el problema con esto es que si su sitio es público y simplemente desactiva HTTP sin ceremonias, podría perder muchos visitantes. Probablemente ni siquiera se les ocurrirá probar HTTPS si el sitio no se carga con HTTP.
  • Si su sitio requiere un inicio de sesión seguro, entonces toda la sesión del usuario debe estar protegida. No se autentique a través de HTTPS, luego redirija al usuario nuevamente a HTTP. Si lo hace, nuevamente, está dejando a sus usuarios vulnerables a los ataques MITM. El enfoque estándar para la autenticación en estos días es autenticar una vez, luego pasar un token de autenticación de ida y vuelta (en una cookie). Pero si se autentica a través de HTTPS y luego redirige a HTTP, un intermediario puede interceptar esa cookie y usar el sitio como si fuera su usuario autenticado, evitando su seguridad.

  • Los problemas de "rendimiento" con HTTPS se limitan a todos los fines prácticos al apretón de manos involucrado en la creación de una nueva conexión. Haga lo que pueda para minimizar la necesidad de múltiples conexiones HTTPS desde una URL y estará a kilómetros de distancia. Y eso es francamente cierto incluso si está sirviendo su contenido a través de HTTP. Si lee sobre SPDY, se dará cuenta de que todo lo que hace está orientado a tratar de servir todo el contenido desde una sola URL a través de una sola conexión. Sí, el uso de HTTPS afecta el almacenamiento en caché. ¿Pero cuántos sitios web son solo contenido estático y almacenable en caché en estos días? Es probable que obtenga más por su dinero utilizando el almacenamiento en caché en su servidor web para minimizar las consultas redundantes de la base de datos que recuperan datos sin cambios una y otra vez, y evitan que las costosas rutas de código se ejecuten con más frecuencia de la necesaria.


Lo que puede hacer para abordar realmente sslstrip es usar HSTS (preferiblemente precargue su configuración de HSTS ). Si acepta solicitudes a través de HTTP simple o no, en realidad no importa a este respecto, un MITM puede responder a través de HTTP simple (posiblemente proxy a su sitio HTTPS) incluso si solo acepta solicitudes HTTPS.
Håkan Lindqvist

@ HåkanLindqvist ¿Realmente me gané un voto negativo? ¿Le di malos consejos o buenos consejos con respecto a no autenticarme a través de HTTPS y luego cambiarme a HTTP por el resto de la sesión? ¿Proporcioné malos consejos con respecto a los mitos de rendimiento HTTPS? Además, si el cliente inicialmente intenta conectarse usando HTTPS, el MITM no puede interceptar y responder sin activar una alerta en el navegador, porque su certificado no coincidirá a menos que haya robado o falsificado con éxito. Por otro lado, si el sitio acepta una conexión HTTP, la intercepción es más fácil. De cualquier manera, HTTPS sube el listón.
Craig

..y, por supuesto, estoy totalmente de acuerdo con el uso de HSTS.
Craig

Mi problema con la respuesta es el primer elemento de la lista que dice abordar sslstrip mientras que en realidad no lo hace (hablando de mitos). Lo que estaba tratando de obtener en mi comentario inicial es que si tiene un MITM activo (que es lo que necesita para sslstrip en primer lugar), el atacante puede ser esencialmente "el sitio" desde la perspectiva del cliente; es el atacante el que decide si quiere aceptar conexiones HTTP simples del cliente, cómo se comporta su servidor web real en ese sentido no afecta lo que el atacante puede o hará.
Håkan Lindqvist

@ HåkanLindqvist Excepto que si el visitante está intentando conectarse intencionalmente con HTTPS, el atacante no puede satisfacer esa solicitud sin lanzar banderas en el navegador, a menos que hayan logrado robar un certificado de servidor o de alguna manera falsificarlo, lo que tendrían que hacer para cambiar la conexión a HTTP. HTTPS todavía sube el listón. Por supuesto, si el visitante realiza el intento de conexión inicial a través de HTTP, todas las apuestas están completamente desactivadas.
Craig

1

Esto no es técnicamente una respuesta a su pregunta original, pero si utiliza la extensión HTTPS de Google Chrome en todas partes (estoy seguro de que hay extensiones similares en otros navegadores), la extensión redirige automáticamente los sitios con HTTP al mismo sitio con HTTPS. Lo he estado usando por un tiempo, y no he tenido ningún problema (excepto tal vez desaceleración, pero no lo he probado). HTTPS En todas partes se puede cambiar mediante ciertas reglas en el lado del servidor, pero como no he hecho mucho en esa área, no estoy seguro de los detalles exactos.

Volviendo a su pregunta real, si usa algo como HTTPS en todas partes, hay incluso menos incentivos para usar solo HTTP, aunque imagino que es difícil establecer reglas correctas cuando las necesita.


1

El único inconveniente técnico de HTTPS sobre HTTP es que es computacionalmente más costoso procesar solicitudes HTTPS que HTTP simple

Sin embargo, dado que la mayoría de los servidores modernos tienen CPU de alta potencia, este impacto generalmente es insignificante a menos que se encuentre en niveles extremadamente altos de tráfico, en cuyo punto es más probable que use equilibradores de carga de todos modos

Con el advenimiento de protocolos como SPDY que requieren SSL / TLS para funcionar, esto realmente contrarresta la sobrecarga computacional antes mencionada al proporcionar mejoras de rendimiento significativas con respecto a múltiples solicitudes y obtener activos para el cliente más rápido en general.


El problema con el rendimiento de HTTPS es que establecer una nueva conexión es más costoso porque hay más viajes de ida y vuelta y porque el cifrado / descifrado asimétrico es mucho más costoso que el cifrado / descifrado simétrico. Una vez que el protocolo de enlace de conexión establece una clave de cifrado simétrica compartida, la sobrecarga continua es prácticamente irrelevante (muy pequeña). Si lees en SPDY, verás que el objetivo de todas las cosas elegantes que hace es esencialmente servir todo el contenido de una URL a través de una sola conexión, mitigando la sobrecarga del protocolo de enlace.
Craig

1

Es muy bueno redirigir a https, pero lo leí también depende de cómo organices la redirección.

Hacer un servidor virtual dedicado para redirigir las solicitudes HTTP entrantes a su conexión https como se sugiere en la respuesta en security.stackexchange.com suena muy inteligente y cerrará algunas amenazas de seguridad adicionales. Una configuración en Apache se vería así:

# Virtual host for rerouting
<VirtualHost *:80>
    ServerName www.example.com
    Redirect permanent / https://www.example.com/
</VirtualHost>

# Virtual host for secure hosting on https
<VirtualHost *:443>
    ServerName www.example.com
    SSLEngine on
    Header set Strict-Transport-Security "max-age=8640000;includeSubdomains"

    ...site settings...

</VirtualHost>
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.