Tema 4 - Servicio HTTP Servicios en Red
Tema 4 - Servicio HTTP Servicios en Red
Tema 4 - Servicio HTTP Servicios en Red
¿Qué es HTTP?: Protocolo de Transferencia de Hipertexto. Es el método más común de intercambio de información
en la red WWW, mediante el cual se transfieren páginas desde un ordenador servidor a uno cliente.
→ Actualmente está en su versión 3 (2018). Se introdujeron algunas mejoras pero el funcionamiento básico del
protocolo apenas ha cambiado desde la versión 1.1. de 1999. Es frecuente ver HTTP / 1.1
→ HTTPS: Protocolo que la versión segura de HTTP. Es un estándar web desde el 2000.
Es una agrupación de miles de páginas electrónicas basadas en textos y en todo tipo de información multimedia,
conectadas entre sí, a través de hiperenlaces (elementos de las páginas que enlazan con otras páginas o elementos).
Cliente HTTP: Programa navegador. Solicita a un servidor Web el envío de páginas de información. Chrome, Firefox.
Las páginas son documentos de texto plano, estructurado por etiquetas en lenguaje HTML y que el navegador
interpretará para poder mostrarlo al usuario en el formato adecuado
Si lo que recibe no es un documento de texto (vídeo, sonido) no reconocido por el cliente, éste deberá encargarse
de activar una aplicación externa capaz de gestionarlo, o preguntar al usuario qué desea hacer con el fichero.
→Cookies: Ficheros de texto que se intercambian entre el cliente y el servidor, la próxima vez que se demande un
intercambio de información partiendo de la misma situación, se tendrá en cuenta la información de dichos ficheros.
Dan “memoria” al protocolo.
Ej: Mantener una sesión abierta en un servidor web→ Puedo mantenerla abierta aunque visite otras webs
1. ¿Cómo sabemos las cookies que tenemos guardadas si utilizamos el navegador Chrome ?
Mira en chrome://settings/content/all y averigua cuántas cookies tienes actualmente con ese navegador.
2. ¿Por qué las cookies pueden ser un problema para la privacidad del usuario?
Apache: Es el más usado en Internet. Es software libre. Actualmente está en la versión 2. Normalmente
trabaja sobre Linux pero también puede instalarse sobre Windows .
Internet Information Server (IIS): Desarrollado por Microsoft para sus sistemas servidores (Ej: 2008 server,
2012 server, etc; también se puede activar en sistemas operativos cliente como Windows 10).
Nginx: Es un servidor web/proxy inverso ligero de alto rendimiento y un proxy para protocolos de correo
electrónico (IMAP/POP3).
● GWS (Google Web Server): es un servidor a medida que Google usa en sus infraestructuras.
Uso de servidores web:
Es una secuencia de caracteres que se usa para nombrar recursos en Internet, por su localización.
Ej: http://www.pepe.com:8080/casa/pepe.htm
● https://merluzo.com:8443
● http://terra.es/cine/video/estar.wmv
Comunicación HTTP
El intercambio de información entre el cliente y el servidor web se concreta mediante mensajes: Son las peticiones
del que se realizan entre el cliente y el servidor, así como las respuestas en sentido inverso.
El contenido de dichos mensajes son líneas de texto, cada una de las cuales contiene las órdenes y parámetros con
las sintaxis definidas por el protocolo HTTP.
Formato básico:
URI: Es el identificador del recurso en el servidor. Suele coincidir con su URL. Un URI se diferencia del URL en que
permite incluir en la dirección una subdirección (las que empiezan por "#" que indican un fragmento de una página
web)
Son las respuestas del servidor web a las peticiones del cliente. Formato:
● Informativos (1xx)
● Éxito de la solicitud (2xx)
6. Busca en el listado de códigos de estado ¿Qué significa en http un código de estado 505? ¿Quién lo genera? Lo
genera el servidor y significa el servidor no soporta o no quiere soportar la versión del protocolo HTTP utilizada en la
petición del navegador.
2. El cliente envía una petición indicando el método, la URI a la que pretende acceder y la versión del
protocolo.
3. El servidor responde con una línea de estado (versión protocolo, código de estado, texto explicativo), varías
líneas de encabezado adicionales y un cuerpo del mensaje donde aparecen los datos solicitados por el
cliente.
→A CADA PETICIÓN HTTP DEL CLIENTE, EL SERVIDOR DEBE DAR UNA RESPUESTA
7. Relaciona la siguiente captura de Wireshark con el esquema anterior de comunicación con HTTP (indica también
quién es el servidor, el cliente, la petición, URI, versión del protocolo y línea de estado)
Certificado digital
Un certificado digital o certificado electrónico es un fichero informático generado por una entidad de servicios de
certificación que asocia unos datos de identidad a una persona física, organismo o empresa confirmando de esta
manera su identidad digital en Internet.
El certificado digital es válido para autenticar a un usuario o sitio web en internet por lo que es necesaria la
colaboración de un tercero que sea de confianza para cualquiera de las partes que participe en la comunicación.
El nombre asociado a esta entidad de confianza es Autoridad Certificadora pudiendo ser un organismo público o
empresa reconocida en Internet.
Los certificados digitales emitidos por una Autoridad Certificadora llevan un coste económico.
Autoridad de certificación
Es la entidad que garantiza la identidad del usuario mediante la emisión de certificados, permite la firma electrónica
y el intercambio de claves de cifrado.
Ejemplos:
SSL ha evolucionado a otro protocolo de cifrado llamado TLS . SSL llegó hasta la versión 3.0 y después se continuó
con TLS. La versión de TLS que más se usa es la 1.2. Desde el año 2018 existe la versión 1.3, que es la más segura.
El sistema HTTPS utiliza un cifrado basado en SSL/TLS para crear un canal cifrado más apropiado para el tráfico de
información sensible que el protocolo HTTP.
De este modo se consigue que la información sensible no pueda ser usada por un atacante que haya conseguido
interceptar la transferencia de datos de la conexión, ya que lo único que obtendrá será un flujo de datos cifrados que
le resultará imposible de descifrar. HTTPS usa por defecto usa el puerto 443.
Para preparar un servidor web que acepte conexiones HTTPS, el administrador debe crear un certificado de clave
pública para el servidor web. Este certificado debe estar firmado por una autoridad de certificación para que el
navegador web lo acepte.
Los navegadores web generalmente son distribuidos con los certificados raíz firmados por la mayoría de las
autoridades de certificación por lo que éstos pueden verificar certificados firmados por dichas autoridades.
Las organizaciones pueden también ser su propia autoridad de certificación, particularmente si son responsables
de establecer acceso a navegadores de sus propios sitios (sitios en una compañía intranet).
Estas pueden agregar copias de su propio certificado firmado a los certificados de confianza distribuidos con el
navegador.
(Por ejemplo, el servidor Apache se puede activar un módulo SSL con un certificado autofirmado)
8. Captura con Wireshark el tráfico de tu tarjeta mientras simulas la compra de un billete en RENFE.es ¿Qué
protocolos de seguridad identificas? TLSv1.2 ¿A qué puerto nos conectamos con el servidor seguro de RENFE? 443
Una clave pública que el servidor comparte con el cliente para que éste encripte
Una clave privada que el servidor no comparte y para desencriptar
Al principio de la conexión se genera una llave de sesión (session key) encriptada con la calve pública y que será la
que servirá para encriptar y desencriptar todas las comunicaciones.
Cifrado asimétrico:
La clave de sesión:
Cifrado simétrico:
Se usa la misma clave (clave de sesión) para cifrar y descifrar las comunicaciones.
¿Qué trama asegura al cliente que se ha conectado al servidor de www.wikipedia.org? Certificate, Certificate Status.
Haz la experiencia de capturar con Wireshark mientras accede a la esta web. Analiza la captura y encuentra la trama
El mensaje "Change Cipher Spec" es para indicar que a partir de este punto, los datos se cifrarán o descifrarán utilizando los
parámetros acordados.
14. ¿Cómo nos puede ayudar el sitio https://letsencrypt.org/es/ a montar un servidor HTTPS?
https://es.wikipedia.org/wiki/X.509#Estructura_de_un_certificado
También se puede usar las opciones clásicas de #service apache2 start, #service apache2 stop y #service apache2
restart
Si únicamente estás realizando cambios en la configuración, puedes recargar Apache sin necesidad de perder las
conexiones que pudieran estar activas: # systemctl reload apache2
El Archivo de configuración general de Apache es: /etc/apache2/apache2.conf. Si hacemos cambios en este archivo
deberemos reiniciar el servicio para sean efectivos.
Este archivo sirve para configurar el servidor apache. Cada línea contiene una directiva de configuración. Si la línea
empieza por un # es un comentario.
En ese fichero se incluyen los ficheros que forman parte de la configuración de Apache2:
...
IncludeOptional mods-enabled/*.load
IncludeOptional mods-enabled/*.conf
...
Include ports.conf
...
IncludeOptional conf-enabled/*.conf
IncludeOptional sites-enabled/*.conf
Los ficheros que se añaden guardados en el directorio mods-enabled corresponden a los módulos activos.
Los ficheros añadidos del directorio sites-enabled corresponden a la configuración de los sitios virtuales activos.
Algunas directivas que podemos configurar son: #Directorio con los ficheros de configuración de Apache
ServerRoot "/etc/apache2"
Por defecto están los Archivos log (error.log y access.log) están en /var/log/apache2
Variables de entorno
El servidor HTTP Apache HTTP ofrece un mecanismo para almacenar información en variables especiales que se
llaman variables de entorno. Esta información puede ser usada para controlar diversas operaciones como por
ejemplo, almacenar datos en ficheros de registro (log files) o controlar el acceso al servidor. Podemos encontrar
estas variables definidas en el fichero /etc/apache2/envvars.
Apache escucha en el tradicional puerto 80 del protocolo HTTP como puedes comprobar en el archivo
/etc/apache2/ports.conf
Este archivo sirve para configurar el servidor apache. Cada línea contiene una directiva de configuración. Si la línea
empieza por un # es un comentario.
Directivas básicas con sus valores por defecto: #Nombre del servidor
ServerName nombre del servidor. Si le ponemos un nombre DNS, debemos registrar este nombre en un servidor
DNS y el servidor DNS del cliente debe resolver ese nombre.
DocumentRoot /var/www/html
Podemos comprobar que, por defecto, la página index.html del sitio web se encuentra en ese directorio:
Apache es capaz de atender, desde una sola máquina, a todo un conjunto de sitios web.
Este archivo de configuración irá en /etc/apache2/sites-available (es el directorio donde se alojan los diferentes
sitios virtuales que podrían habilitarse) siendo el archivo 000-default.conf el sitio por defecto.
Para el sitio virtual crearemos otro archivo de configuración y utilizaremos la estructura siguiente
<VirtualHost *:80>
Directivas de configuración
</VirtualHost>
De entre las directivas posibles, vamos a fijar las siguientes para cada sitio virtual:
● ServerName (Nombre por el que se va a acceder al virtual host, el nombre DNS o el nombre de la máquina)
● DocumentRoot (Es el directorio donde están los archivos html del sitio)
Para habilitar un sitio virtual y deshabilitar el sitio que estaba por defecto hacemos lo siguiente:
Lo que hace la orden a2ensite es crear un enlace simbólico al fichero smr2.conf dentro del directorio
/etc/apache2/sites-enabled. Digamos que pasa de ser un sitio disponible a ser un sitio activado. Puedes
comprobarlo listando el contenido de /etc/apache2/sites-enabled:
Si quisieramos tener los 2 sitios activos a la vez podríamos hacerlo habilitándoles y además cada sitio web debería
escuchar por un puerto diferente.
Ejemplo:
Además debe indicarse todos los puertos de escucha del servidor web en:
Otra forma de tener varios sitios web en la misma máquina es hacer que cada sitio web responda a una IP diferente,
es el virtual host basado en Ip:
Para ello debemos asignar a una interfaz varias IPs y para cada sitio virtual indicaremos su IP:
1) configuración en netplan
enp0s8:
También podemos hacer que un mismo sitio responda a varias IPs. Ejemplo:
Se supone que las 2 IPs corresponden a IPs del servidor en diferentes interfaces de red)
Otra forma de tener varios sitios web en una máquina es por medio los nombres DNS que aparecen en ServerName
siempre y cuando previamente hayamos asociado estos nombres DNS con la Ip de la máquina en su zona DNS
definida en Bind.
Ejemplo:
En este caso se accederá a un sitio web con lab.geekflare.com y al otro con gf.dev.
HTTPs en Apache
Ahora vamos a habilitar el módulo SSL para poder usar https con el servidor.
Para ello: # a2enmod ssl y habilitamos el sitio default-ssl.conf: # a2ensite default-ssl.conf cuya configuración está
en:
Nos advierte que el certificado de nuestro sitio no es válido por que está auto-firmado. Nos da igual, y añadimos
excepción.
y confirmamos la excepción.
Comprueba que funciona la web con https, aunque nos advierte que la conexión no es segura
En los detalles de la conexión vemos:
Y el certificado:
Como se puede ver el puerto 443 es el que está configurado para ser usado por este sitio virtual
y certificado generado por la instalación por defecto es el que si indicaba así en la configuración del VirtualHost:
Comentar que imprescindible esta directiva para que el módulo esté activo:
Si quisieramos hacer un certificado autofirmado tendríamos que usar el comando openssl req.
Ejemplo:
y después poner la localización del certificado (.pem) y la clave privada (.key) en la configuración del sitio.
Si queremos que el servidor web atienda una petición por su nombre DNS o su alias debemos configurar el servidor
DNS de este dominio. Para ello, con Bind, editamos:
y añadimos los RR necesarios en el fichero indicado:
Reiniciamos el servicio:
Directivas básicas para un sitio con sus valores por defecto: Se ponen entre <VirtualHost *:80> y </VirtualHost >
ServerName: Nombre por el que se va a acceder al virtual host, el nombre DNS o sino el nombre de la
máquina. Es necesaria si queremos acceder por el nombre al servidor (también sería necesario que el
nombre DNS pueda ser resuelto por un servidor DNS)
DocumentRoot /var/www/html —> Directorio raíz de los documentos publicados
Errorlog /var/log/apache2/error.log —> fichero que registra los errores
CustomLog /var/log/apache2/access.log common —> fichero registra accesos al sitio en formato común:
(En los registros consta la IP del cliente, fecha, la petición del cliente y el código de respuesta del servidor a la
petición). EJ: Petición GET con respuesta 200 del servidor. También existe el formato combined, algo más extenso:
Nota: Los archivos log los creará apache al empezar a registrar accesos. No es necesario que existan previamente,
pero sí el directorio donde se situarán.
Como es un navegador en línea de comandos sólo puede mostrar texto. No se pueden ver imágenes o videos. Sin
embargo, si podemos ver:
Vamos a instalarlo en nuestra máquina de Ubuntu Server para salir a Internet por la conexión NAT.
Para llegar a una página basta con poner en el terminal w3m sitio_web.
Podemos escribir texto haciendo ENTER sobre las áreas que haya que completar, estas áreas normalmente se
encuentran entre corchetes "[ _ ]". Luego aparecerá en la última línea del programa una pequeña barra con la
indicación "TEXT:", en esa línea podemos escribir lo que necesitemos y presionando nuevamente ENTER ese texto se
escribe en el área seleccionada. Esto sirve para escribir usuarios, contraseñas, comentarios, etc.
a) ¿Cuál es la dirección IP del servidor web?¿Es un servidor web seguro? Razona la respuesta.
204.79.197.200
b) ¿Cuál es el puerto de conexión del servidor web? 443
c) ¿Se produce un intercambio de certificado entre el cliente y el servidor? ¿Por qué?
El protocolo de intercambio de información es TSL, que es un protocolo para intercambio de información
segura a través del navegador con cifrado de los datos. Para ello es necesario la transferencia de certificados
del servidor al cliente y el intercambio de claves públicas para el cifrado de la conexión.
4. Observa la siguiente imagen
a) ¿Es este un servidor con el que nos comunicamos por un canal cifrado? Razona la respuesta Si, se está
utilizando el protocolo HTTPS por lo que la conexión es cifrada.
b) ¿Qué es "Symantec Class 2 Secure Server CA -G4"? ¿Para qué sirve? El emisor del certificado digital.
● Cuál es el directorio por defecto del servidor en el que se ponen los archivos web del sitio web.
● Dónde almacena los registros de los accesos al servidor
7. Si vemos esto:
9. ¿Qué clave del servidor obtiene un navegador web al conectar con un servidor seguro?
10. Al usar HTTPS con el servidor Apache aparece la siguiente información en el navegador del cliente ¿Por qué?
No es un certificado oficial creado por una compañía certificadora y no es considerado como válido por el
explorador.
11. Si un navegador tiene esta información sobre el CPIFP Los Enlaces
19 . En Apache, en la configuración del sitio que trabaja SSL (default-ssl.conf) nos indica lo siguiente: