25 Ago

Protocolo de Transferencia de Hipertexto (HTTP)

HTTP define la sintaxis y la semántica que utilizan los elementos de software de la arquitectura web (clientes, servidores, proxies) para comunicarse. Es un protocolo orientado a transacciones y sigue el esquema petición-respuesta entre un cliente y un servidor. Al cliente que efectúa la petición (un navegador web o un spider) se lo conoce como «user agent» (agente del usuario). A la información transmitida se la llama recurso y se la identifica mediante un localizador uniforme de recursos (URL). El resultado de la ejecución de un programa, una consulta a una base de datos, la traducción automática de un documento, etc.

HTTP se basa en sencillas operaciones de solicitud/respuesta. Un cliente establece una conexión con un servidor y envía un mensaje con los datos de la solicitud. El servidor responde con un mensaje similar, que contiene el estado de la operación y su posible resultado. Todas las operaciones pueden adjuntar un objeto o recurso sobre el que actúan; cada objeto Web (documento HTML, fichero multimedia o aplicación CGI) es conocido por su URL.

HTTP es un protocolo sin estado, es decir, que no guarda ninguna información sobre conexiones anteriores. El desarrollo de aplicaciones web necesita frecuentemente mantener estado. Para esto se usan las cookies, que es información que un servidor puede almacenar en el sistema cliente. Esto le permite a las aplicaciones web instituir la noción de «sesión», y también permite rastrear usuarios ya que las cookies pueden guardarse en el cliente por tiempo indeterminado.

Etapas de una transacción HTTP

Para profundizar más en el funcionamiento de HTTP, veremos primero un caso particular de una transacción HTTP; en los siguientes apartados se analizarán las diferentes partes de este proceso.

Cada vez que un cliente realiza una petición a un servidor, se ejecutan los siguientes pasos:

  1. Un usuario accede a una URL, seleccionando un enlace de un documento HTML o introduciéndola directamente en el campo Location del cliente Web.
  2. El cliente Web descodifica la URL, separando sus diferentes partes. Así identifica el protocolo de acceso, la dirección DNS o IP del servidor, el posible puerto opcional (el valor por defecto es 80) y el objeto requerido del servidor.
  3. Se abre una conexión TCP/IP con el servidor, llamando al puerto TCP correspondiente.
  4. Se realiza la petición. Para ello, se envía el comando necesario (GET, POST, HEAD,…), la dirección del objeto requerido (el contenido de la URL que sigue a la dirección del servidor), la versión del protocolo HTTP empleada (casi siempre HTTP/1.0) y un conjunto variable de información, que incluye datos sobre las capacidades del browser, datos opcionales para el servidor,…
  5. El servidor devuelve la respuesta al cliente. Consiste en un código de estado y el tipo de dato MIME de la información de retorno, seguido de la propia información.
  6. Se cierra la conexión TCP

Protocolo Simple de Transferencia de Correo (SMTP)

Mail Una persona puede no usar un cliente de correo electrónico, sino un cliente de correo con interfaz web. El proceso es casi el mismo, pero se usan conexiones HTTP para acceder al correo de cada usuario en vez de usar SMTP o IMAP/POP3

El Simple Mail Transfer Protocol (SMTP) o “protocolo para transferencia simple de correo”, es un protocolo de red utilizado para el intercambio de mensajes de correo electrónico entre computadoras u otros dispositivos (PDA, teléfonos móviles, etcétera). Fue definido en el RFC 2821 y es un estándar oficial de Internet.1

El funcionamiento de este protocolo se da en línea, de manera que opera en los servicios de correo electrónico. Sin embargo, este protocolo posee algunas limitaciones en cuanto a la recepción de mensajes en el servidor de destino (cola de mensajes recibidos). Como alternativa a esta limitación se asocia normalmente a este protocolo con otros, como el POP o IMAP, otorgando a SMTP la tarea específica de enviar correo, y recibirlos empleando los otros protocolos antes mencionados (POP O IMAP).

Protocolo de Acceso a Mensajes de Internet (IMAP)

Internet Message Access Protocol (IMAP, Protocolo de acceso a mensajes de internet), es un protocolo de aplicación que permite el acceso a mensajes almacenados en un servidor de Internet. Mediante IMAP se puede tener acceso al correo electrónico desde cualquier equipo que tenga una conexión a Internet. IMAP tiene varias ventajas sobre POP (otro protocolo empleado para obtener correos desde un servidor). Por ejemplo, es posible especificar en IMAP carpetas del lado del servidor. Por otro lado, es más complejo que POP ya que permite visualizar los mensajes de manera remota y no descargando los mensajes como lo hace POP.

En el ejemplo ficticio descrito por la figura, Ana (ana@a.org) envía un correo a Bea (bea@b.com). Cada una de ellas tiene su cuenta de correo electrónico en un servidor distinto (una en a.org, otra en b.com), pero éstos se pondrán en contacto para transferir el mensaje.

Secuencialmente, son ejecutados los siguientes pasos:

  1. Ana escribe el correo en su programa cliente de correo electrónico. Cuando envía el mensaje, el programa hace contacto con el servidor de correo usado por Ana (en este caso, smtp.a.org). Se comunica usando un lenguaje conocido como protocolo SMTP. Le transfiere el correo, y le da la orden de enviarlo.
  2. El servidor SMTP debe entregar un correo a un usuario del dominio b.com, pero no sabe con qué ordenador tiene que conectarse. Para ello, efectúa una consulta al servidor DNS de su red, usando el protocolo DNS, y le pregunta que servidor es el encargado de gestionar el correo del dominio b.com. Técnicamente, le está preguntando el registro MX asociado a ese dominio.
  3. Como respuesta a esta petición, el servidor DNS contesta con el nombre de dominio del servidor de correo de Bea. En este caso es mx.b.com; el cual es un servidor gestionado por el proveedor de Internet de Bea.
  4. El servidor SMTP (smtp.a.org) ya puede conectarse con mx.b.com y transferirle el mensaje, que quedará guardado en este ordenador. Se usa otra vez el protocolo SMTP.
  5. Posteriormente, cuando Bea inicie su programa cliente de correo electrónico, su ordenador inicia una conexión, mediante el protocolo POP3 o IMAP, al servidor que guarda los correos nuevos que le han llegado. Este ordenador (pop3.b.com) es el mismo que el del paso anterior (mx.b.com), ya que se encarga tanto de recibir correos del exterior como de entregárselos a sus usuarios. En el esquema, Bea recibe el mensaje de Ana mediante el protocolo POP3.

Criptografía Asimétrica

La criptografía asimétrica (en inglés asymmetric key cryptography), también llamada criptografía de clave pública (en inglés public key cryptography) o criptografía de dos claves1 (en inglés two-key cryptography), es el método criptográfico que usa un par de claves para el envío de mensajes. Las dos claves pertenecen a la misma persona que ha enviado el mensaje. Una clave es pública y se puede entregar a cualquier persona, la otra clave es privada y el propietario debe guardarla de modo que nadie tenga acceso a ella. Además, los métodos criptográficos garantizan que esa pareja de claves sólo se puede generar una vez, de modo que se puede asumir que no es posible que dos personas hayan obtenido casualmente la misma pareja de claves.

Si el remitente usa la clave pública del destinatario para cifrar el mensaje, una vez cifrado, sólo la clave privada del destinatario podrá descifrar este mensaje, ya que es el único que la conoce. Por tanto se logra la confidencialidad del envío del mensaje, nadie salvo el destinatario puede descifrarlo.

Si el propietario del par de claves usa su clave privada para cifrar el mensaje, cualquiera puede descifrarlo utilizando su clave pública. En este caso se consigue por tanto la identificación y autentificación del remitente, ya que se sabe que sólo pudo haber sido él quien empleó su clave privada (salvo que alguien se la hubiese podido robar). Esta idea es el fundamento de la firma electrónica.

Certificados Digitales

Un certificado digital (digital certificate) es una estructura de datos que autentica una clave pública y contiene por lo menos los siguientes datos:

  • El nombre del dueño de la clave pública.
  • El nombre de la entidad que certifica que la clave pertenece de hecho a ese dueño.
  • La clave pública propiamente dicha.
  • Un checksum digital del certificado en sí mismo, encriptado con la clave privada de la entidad que emite el certificado.

Creando un certificado digital, una agencia garantiza que la clave pública pertenece a la entidad que solicitó el certificado. La entidad solicitante es el sujeto (subject) y la entidad que certifica el emisor (issuer). El formato del certificado X.509 codifica aquellos nombres de acuerdo a una sintaxis especial, denominándolos nombres distinguidos (DNs). Para la creación del certificado, el emisor reúne información acerca de la entidad solicitante hasta que verifica fehacientemente su identidad. Entonces combina el nombre de la entidad, la clave pública de la entidad y su propio nombre en una estructura de datos y calcula el checksum digital de la misma. Luego la agencia certificadora encripta el resultado de ese checksum usando su propia llave privada y agrega ese checksum encriptado a la estructura de datos del certificado.

Supongamos que Frank tiene un renombrado servicio de certificación digital y que ambos, Alice y Bob, confían en él. Bob puede contactar a Frank y solicitarle que emita un certificado digital. Frank solicitará que le entregue algún tipo de identificación que demuestre que realmente es Bob. Una vez que Frank esté convencido que Bob es realmente Bob, construirá un certificado digital utilizando un programa de computadora. Las entradas de ese programa son el nombre de Bob como sujeto, su llave pública y el nombre de Frank como emisor. El programa calculará el checksum digital de la combinación de estos ítems y encriptará el valor resultante usando la llave privada de Frank. Cuando Alice quiera la clave pública de Bob, encontrará su certificado digital y lo validará usando la llave pública de Frank. Para validar, Alice separa el checksum encriptado del certificado digital y calcula el checksum del resto de la estructura. Entonces usa la clave pública de Frank para desencriptar el checksum original y lo compara con el resultado que obtuvo antes. Si hay coincidencia, Alice sabe que fue Frank y no otro el que colocó información dentro de ese certificado. ¿Cómo sabe Alice que tiene realmente la clave pública de Frank?

Puede validarla utilizando el certificado digital emitido hacia Frank por alguna otra empresa confiable. Normalmente, esta cadena de confianza terminará en una agencia públicamente reconocida que haya saturado internet con su llave pública. Algunas de esas entidades son VeriSign, Entrust, y GlobalSign, que tienen sus llaves públicas incorporadas en varios software incluyendo Internet Explorer. Incidentalmente, el certificado en la cima de la jerarquía es un certificado autofirmado (self-signed).

Deja un comentario