2012-01-13 43 views
24

Sólo quiero comprobar, al realizar una conexión SSL (HTTP POST) para decir:Con HTTPS, ¿los encabezados de URL y de solicitud están protegidos como el cuerpo de la solicitud?

https://www.example.com/some/path?customer_key=123123123 

Si no quieren que nadie sepa customer_key, este enfoque no funcionará incluso si estoy haciendo una https conexión correcta?

Todos los datos que quiero asegurados tienen que estar en el cuerpo de la solicitud ¿no?

+1

Solo para aclarar (ver algunas otras respuestas). Tu problema es escuchar a escondidas en el medio, ¿verdad? ¿Le preocupa la forma en que almacena * sus * registros también (presumiblemente está ejecutando este servidor)? – Bruno

+3

posible duplicado de [¿Están las URL de https encriptadas?] (Http://stackoverflow.com/questions/499591/are-https-urls-encrypted) – Gumbo

Respuesta

33

Citando al HTTPS RFC:

Cuando el apretón de manos TLS ha terminado. El cliente puede iniciar la primera solicitud HTTP . Todos los datos HTTP DEBEN enviarse como TLS "solicitud datos".

Básicamente, primero se establece el canal seguro SSL/TLS. Solo entonces se usa el protocolo HTTP. Esto protegerá todo el tráfico HTTP con SSL, incluidos los encabezados HTTP (que contienen la URL y las cookies).

Lo que puede verse en el handshake es el nombre del host, ya que está contenido en el certificado del servidor que se verá claramente en el handshake (y es fácil adivinar el nombre del host mirando la dirección IP de destino de todas formas).

Al usar la Indicación del nombre del servidor, el nombre de host solicitado también debe estar visible en la extensión server_name en el mensaje ClientHello. De lo contrario, puede haber un poco de ambigüedad (para el espía) para adivinar el nombre de host del certificado si el certificado es válido para múltiples nombres de host (por ejemplo, múltiples Alt. Nombres o comodines). En este caso, espiar la solicitud DNS del cliente podría darle una pista al atacante.

Leyendo las respuestas y comentarios de otras personas, algunos mencionan problemas sobre Referer (perdieron un r en la especificación) y registros.

Uno de los puntos débiles potenciales restantes es cómo le das que enlazan con el usuario. Si está incrustado en una página web servida sobre HTTP simple, cualquiera que pueda leer esa página podrá verla. También debe publicar dicha página en HTTPS. Si envía ese enlace por correo electrónico, diría que todas las apuestas están desactivadas, ya que los servidores de correo rara vez encriptan las conexiones entre ellos y los usuarios también suelen acceder a su cuenta de correo electrónico sin ningún cifrado.

EDIT:

Además, si usted está utilizando la autenticación de certificado de cliente, el certificado de cliente serán visibles si se negocia durante el apretón de manos inicial. Esto puede filtrar el nombre del usuario que accede al sitio web (a menudo los DN del sujeto contienen el nombre de usuario). El certificado del cliente no estará visible si se envía durante un intercambio de manos negociado de nuevo.

3

Sólo www.example.com será visible para los fisgones. La sección de ruta de la solicitud está protegida por SSL/TLS.

Obviamente, debe haber enviado también el hipervínculo original por HTTPS.

0

Eso depende ..

Si se utiliza un analizador de paquetes no se pueden ver los datos enviados a través del cable. El principal problema con este enfoque es que la URL de solicitud a menudo se guarda en el registro del servidor en texto sin formato, el historial del navegador mantiene la url, las URL se pasan en los encabezados de referencia y tal vez persistan en servicios de terceros (google analytics).

+0

bien, esto es de servidor a servidor, no de navegador de cliente a servidor. – codecompleting

+1

El 'Referer' no se debe pasar con HTTPS: http://stackoverflow.com/a/8848843/372643 – Bruno

1

Los datos de solicitud se enviarán después de establecer una conexión segura, así que no te preocupes con la URL anterior, pero recuerda que tus datos no están encriptados, solo el canal entre el servidor y el cliente está encriptado, si uno puede descifrar este canal, puede ver claramente tu datos.

SSL es un canal encriptado en la parte superior de sus datos. Si los datos son simples, cualquiera que pueda descifrar el SSL puede ver sus datos con claridad.

+0

¿Cuál es la diferencia entre el cifrado de canal y el cifrado de datos. En ssl handshake, el servidor y el cliente http acuerdan una clave secreta y los datos enviados se cifran con esa clave secreta, ¿verdad? – Ashwin

+0

@Ashwin, suponga que está enviando ABC en el cable, ssl envuelve ABC con la clave secreta, luego será algo así como [ABC], [] es la clave contenedora (o), pero el contenido que contiene sigue siendo ABC. Si alguien sabe [] (su clave), puede obtener sus datos fácilmente. – kosa

+0

¿Cómo sabrá alguien mi clave. ¿Es un secreto compartido solo entre el cliente y el certificado? ¿Hay alguna forma de conocer la clave secreta por parte de una tercera persona? – Ashwin

Cuestiones relacionadas