¿Se encriptan todas las URL cuando se usa el cifrado TLS / SSL (HTTPS)? Me gustaría saberlo porque quiero que todos los datos de URL estén ocultos cuando utilizo TLS / SSL (HTTPS).
Si TLS / SSL le proporciona un cifrado total de URL, entonces no tengo que preocuparme por ocultar información confidencial de las URL.
ssl
https
httprequest
Daniel Kivatinos
fuente
fuente
https://somewhere_i_trust/ways_to_protest_against_the_government/
. Luego, la URL contiene datos confidenciales, es decir, la sugerencia de que estoy considerando protestar contra mi gobierno.Respuestas:
Sí, la conexión SSL es entre la capa TCP y la capa HTTP. El cliente y el servidor primero establecen una conexión TCP cifrada segura (a través del protocolo SSL / TLS) y luego el cliente enviará la solicitud HTTP (GET, POST, DELETE ...) a través de esa conexión TCP cifrada.
fuente
Como nadie proporcionó una captura de cable, aquí hay una.
El nombre del servidor (la parte del dominio de la URL) se presenta en el
ClientHello
paquete, en texto sin formato .A continuación se muestra una solicitud del navegador para:
https://i.stack.imgur.com/path/?some=parameters&go=here
Consulte esta respuesta para obtener más información sobre los campos de versión de TLS (hay 3 de ellos, ¡no versiones, campos que contienen un número de versión!)
Desde https://www.ietf.org/rfc/rfc3546.txt :
En breve:
El FQDN (la parte del dominio de la URL) PUEDE transmitirse en claro dentro del
ClientHello
paquete si se usa la extensión SNIEl resto de la URL (
/path/?some=parameters&go=here
) no tieneClientHello
por qué estar dentro ya que la URL de solicitud es una cosa HTTP (OSI Layer 7), por lo tanto, nunca aparecerá en un protocolo de enlace TLS (Layer 4 o 5). Eso vendrá más adelante en unaGET /path/?some=parameters&go=here HTTP/1.1
petición HTTP, después el seguro se establece canal TLS.RESUMEN EJECUTIVO
El nombre de dominio PUEDE transmitirse en claro (si se usa la extensión SNI en el protocolo de enlace TLS) pero la URL (ruta y parámetros) siempre está encriptada.
ACTUALIZACIÓN MARZO 2019
Gracias carlin.scott por mencionar esto.
La carga útil en la extensión SNI ahora se puede cifrar a través de este borrador de propuesta de RFC . Esta capacidad solo existe en TLS 1.3 (como una opción y depende de ambos extremos implementarla) y no hay compatibilidad con TLS 1.2 y versiones anteriores.
CloudFlare lo está haciendo y puedes leer más sobre las partes internas aquí. Si el pollo debe venir antes que el huevo, ¿dónde lo pones?
En la práctica, esto significa que en lugar de transmitir el FQDN en texto plano (como muestra la captura de Wireshark), ahora está encriptado.
NOTA: Esto aborda el aspecto de privacidad más que el de seguridad ya que una búsqueda inversa de DNS PUEDE revelar el host de destino previsto de todos modos.
fuente
Como las otras respuestas ya han señalado, las "URL" https están encriptadas. Sin embargo, su solicitud / respuesta de DNS al resolver el nombre de dominio probablemente no lo sea, y por supuesto, si estaba usando un navegador, sus URL también podrían registrarse.
fuente
Toda la solicitud y respuesta está encriptada, incluida la URL.
Tenga en cuenta que cuando utiliza un proxy HTTP, conoce la dirección (dominio) del servidor de destino, pero no conoce la ruta solicitada en este servidor (es decir, la solicitud y la respuesta siempre están cifradas).
fuente
Estoy de acuerdo con las respuestas anteriores:
Para ser explícito:
Con TLS, la primera parte de la URL ( https://www.example.com/ ) todavía es visible a medida que crea la conexión. La segunda parte (/ herearemygetparameters / 1/2/3/4) está protegida por TLS.
Sin embargo, hay varias razones por las cuales no debe poner parámetros en la solicitud GET.
Primero, como ya mencionaron otros: - fuga a través de la barra de direcciones del navegador - fuga a través del historial
Además de que tiene una fuga de URL a través del árbitro http: el usuario ve el sitio A en TLS, luego hace clic en un enlace al sitio B. Si ambos sitios están en TLS, la solicitud al sitio B contendrá la URL completa del sitio A en El parámetro de referencia de la solicitud. Y el administrador del sitio B puede recuperarlo de los archivos de registro del servidor B.)
fuente
Una adición a la útil respuesta de Marc Novakowski: la URL se almacena en los registros del servidor (por ejemplo, en / etc / httpd / logs / ssl_access_log), por lo que si no desea que el servidor mantenga la información durante más tiempo término, no lo pongas en la URL.
fuente
Si y no.
La parte de la dirección del servidor NO está encriptada ya que se usa para configurar la conexión.
Esto puede cambiar en el futuro con SNI y DNS encriptados, pero a partir de 2018, ambas tecnologías no se usan comúnmente.
La ruta, la cadena de consulta, etc. están encriptados.
Tenga en cuenta que para las solicitudes GET, el usuario aún podrá cortar y pegar la URL de la barra de ubicación, y probablemente no querrá poner información confidencial allí que pueda ver cualquiera que mire la pantalla.
fuente
Un tercero que supervisa el tráfico también puede determinar la página visitada examinando su tráfico y comparándolo con el tráfico que otro usuario tiene cuando visita el sitio. Por ejemplo, si solo hubiera 2 páginas en un sitio, una mucho más grande que la otra, la comparación del tamaño de la transferencia de datos indicaría qué página visitó. Hay formas en que esto podría ocultarse a un tercero, pero no son comportamientos normales del servidor o del navegador. Consulte, por ejemplo, este documento de SciRate, https://scirate.com/arxiv/1403.0297 .
En general, otras respuestas son correctas, aunque prácticamente este documento muestra que las páginas visitadas (es decir, la URL) se pueden determinar de manera bastante efectiva.
fuente
Tampoco siempre puede contar con la privacidad de la URL completa. Por ejemplo, como suele ser el caso en las redes empresariales, los dispositivos suministrados como la PC de su empresa están configurados con un certificado raíz "confiable" adicional para que su navegador pueda confiar silenciosamente en una inspección proxy (intermediaria) del tráfico https . Esto significa que la URL completa está expuesta para inspección. Esto generalmente se guarda en un registro.
Además, sus contraseñas también están expuestas y probablemente registradas, y esta es otra razón para usar contraseñas de un solo uso o para cambiar sus contraseñas con frecuencia.
Finalmente, el contenido de la solicitud y la respuesta también se expone si no se cifra de otra manera.
Aquí, Checkpoint describe un ejemplo de la configuración de inspección . De esta manera, también se puede configurar un "cibercafé" de estilo antiguo con PC suministradas.
fuente
Vinculación a mi respuesta en una pregunta duplicada . La URL no solo está disponible en el historial de los navegadores, sino también en el registro del lado del servidor, sino que también se envía como encabezado HTTP Referer, que si utiliza contenido de terceros, expone la URL a fuentes fuera de su control.
fuente
Ahora es 2019 y se lanzó el TLS v1.3. Según Cloudflare, el SNI se puede cifrar gracias a TLS v1.3. Entonces, me dije genial! veamos cómo se ve dentro de los paquetes TCP de cloudflare.com Entonces, capté un paquete de saludo de "cliente hola" de una respuesta del servidor cloudflare usando Google Chrome como navegador y cables de conexión como sniffer de paquetes. Todavía puedo leer el nombre del servidor en texto plano dentro del paquete de saludo del Cliente.
Por lo tanto, tenga cuidado con lo que puede leer porque todavía no se trata de una conexión anónima. Un middleware entre el cliente y el servidor podría registrar cada dominio que solicite un cliente.
Por lo tanto, parece que el cifrado del SNI requiere implementaciones adicionales para funcionar junto con TLSv1.3
El siguiente artículo describe el cifrado del SNI proporcionado por Cloudflare como parte de TLSv1.3. Sin embargo, todas las URL de HTTP de cloudflare.com están en texto plano dentro del paquete TCP en TLS v1.3
[ https://blog.cloudflare.com/encrypted-sni/font>[3]
fuente
network.security.esni.enabled
, configurarlonetwork.trr.mode
en 2 (que actualmente configura su resolución DoH en CloudFlare) y reiniciar el navegador (sic!); luego usará ESNI, donde sea compatible con la infraestructura del dominio. Ver blog.mozilla.org/security/2018/10/18/… para más detalles.Aunque ya hay algunas buenas respuestas aquí, la mayoría de ellas se centran en la navegación del navegador. Escribo esto en 2018 y probablemente alguien quiera saber sobre la seguridad de las aplicaciones móviles.
Para las aplicaciones móviles , si controla ambos extremos de la aplicación (servidor y aplicación), siempre que use HTTPS estará seguro . iOS o Android verificarán el certificado y mitigarán posibles ataques de MiM (ese sería el único punto débil en todo esto). Puede enviar datos confidenciales a través de conexiones HTTPS que se cifrarán durante el transporte . Solo su aplicación y el servidor conocerán los parámetros enviados a través de https.
El único "tal vez" aquí sería si el cliente o el servidor están infectados con software malicioso que puede ver los datos antes de que estén envueltos en https. Pero si alguien está infectado con este tipo de software, tendrá acceso a los datos, sin importar lo que use para transportarlos.
fuente
Además, si está creando una API ReSTful, la fuga del navegador y los problemas de referencia http se mitigan en su mayoría, ya que el cliente puede no ser un navegador y es posible que no haya personas haciendo clic en los enlaces.
Si este es el caso, recomendaría iniciar sesión en oAuth2 para obtener un token de portador. En cuyo caso, los únicos datos confidenciales serían las credenciales iniciales ... que probablemente deberían estar en una solicitud posterior de todos modos
fuente
Si bien ya tiene muy buenas respuestas, realmente me gusta la explicación en este sitio web: https://https.cio.gov/faq/#what-information-does-https-protect
en resumen: el uso de HTTPS oculta:
fuente