You are on page 1of 15

Tema 05.

Servicio HTTP

1. ¿Qué es el servicio HTTP?

Las siglas HTTP significan: HyperTex Transfer Protocol (Protocolo de transferencia de


hipertexto). Fue creado como un medio para compartir los datos científicos a nivel internacional. Es
el método más común de intercambio de información en la World Wide Web, por el cual se
transfieren las páginas web, o páginas HTML. El hipertexto es el contenido de las páginas web, y el
protocolo HTTP es el conjunto de normas mediante las cuales se envían las peticiones de acceso a
una web y se recibe la respuesta de esa web.
Existe una versión segura de HTTP llamada HTTPS, que puede utilizar cualquier método de
cifrado, siempre que sea entendido por el servidor y el cliente.

https://es.wikipedia.org/wiki/Protocolo_de_transferencia_de_hipertexto

El Protocolo de transferencia de hipertexto (en inglés: Hypertext Transfer Protocol o


HTTP) es el protocolo de comunicación que permite las transferencias de información en la World
Wide Web. HTTP fue desarrollado por el World Wide Web Consortium y la Internet Engineering
Task Force, colaboración que culminó en 1999 con la publicación de una serie de RFC, el más
importante de ellos es el RFC 2616 que especifica la versión 1.1. HTTP define la sintaxis y la
semántica que utilizan los elementos de software de la arquitectura web (clientes, servidores) para
comunicarse. HTTP es un protocolo sin estado, es decir, 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.

Puertos utilizados por HTTP:

http: puerto 80 tcp


http-alt: 8080 tcp
https: 443 tcp
En Linux: cat /etc/services | grep http
En Windows: Abrir el archivo C:\windows\system32\drivers\etc\services

1.1. ¿Cómo funciona el protocolo HTTP?

HTTP es un protocolo cliente/servidor cuyo funcionamiento está basado en el envío de


mensajes y su mecanismo es el siguiente:

- El usuario especifica en el cliente web (navegador) la dirección de la página que quiere


consultar según un formato http://dirección[:puerto] [camino_del_recurso]
- El cliente web decodifica la información de la URL diferenciando el protocolo de acceso, la
IP o nombre de dominio del servidor, el puerto, etc.
- El cliente web establece una conexión (socket) con el servidor web y solicita la página
(mensaje REQUEST).
- El servidor envía dicha página (si no existe, envía un código de error) y el cliente web
interpreta el código HTML recibido (mensaje RESPONSE).
- Se cierra la conexión.

1
El protocolo http es un protocolo sin estado, es decir, no recuerda nada relativo a conexiones
anteriores. Cuando el cliente web solicita un documento HTML pueden ocurrir dos cosas:

- Si el servidor lo encuentra, lo envía.


- Si no existe, envía un código de error.

En ambos casos, por ser un protocolo sin estado, al final se libera la conexión. La conexión
solo tiene la duración necesaria para la transmisión del documento solicitado.
Para cada objeto que se transfiere por la red se realiza una conexión independiente. Si el
cliente solicita una página con imágenes, se realiza una conexión para el documento HTML y una
por cada una de las imágenes.
Para resolver el problema de “falta de memoria”, además de recordar la información de la
sesión actual, se utilizan las cookies (archivo de texto que se intercambia entre el cliente y el
servidor).
En la versión 1.0 del protocolo HTTP el cliente solo podía solicitar del servidor 3
operaciones:

GET. Obtiene información del servidor. (Ocurre cada vez que pulsamos en un enlace).
POST. Envía información del cliente al servidor. (Ejem. Datos de un formulario)
HEAD. Similar a get, pero solo pide la cabecera de la página.

Esquema de una comunicación:

En Ubuntu Server conectar por telnet: telnet localhost 80 o telnet www.apache.org 80


Escribir GET /index.html y el servidor nos enviará el documento HTML como respuesta

2. Los tipos MIME.

Los tipos MIME (Multipurpose Internal Mail Extensions) son una forma de representar el
contenido de los datos. El tipo MIME indica el tipo de archivo que se está transfiriendo del servidor
web al cliente. Se compone de TIPO/SUBTIPO. Por ejemplo:

text/html, text/css, video/mpeg, image/gif, image/jpeg, image/x-icon, application/pdf , etc.

Se pueden referenciar desde el servidor o desde la página web.

2
3. ¿Qué es un servidor web?

Es un programa que haciendo uso del protocolo HTTP atiende las peticiones de los
navegadores
adores y les proporciona los recursos solicitados. El objetivo de un servidor web es servir
páginas web a los clientes que las soliciten.

3.1. El servidor web.

El servidor web tiene la tarea de atender peticiones recibidas desde los navegadores o clientes
web. Un servidor web no solamente
amente puede estar en internet, sino también en una intranet o red
local.
Si desde un navegador hacemos click sobre un enlace, se está enviando una solicitud al
servidor web que aloja dicha página para que nos la sirva. Si la encuentra, el servidor web la envía,
y si no la encuentra, devuelve al cliente un mensaje de error. Cuando el cliente recibe la página,
interpreta el código HTML mostrando de forma correcta los textos, fuentes de letra, colores e
imágenes que la componen.
El servidor web, además de servir documentos HTML que no cambian (estáticos), también
permite la ejecución de pequeños programas que proporcionan dinamismo a las páginas web. Estos
programas pueden ser de tipo CGI (Common Gateway Interface) ya en desuso, desuso estar escritos en
lenguajes como PHP, Java (Applets y Servlets), usar la tecnología ASP de Microsoft, etc. Con estos
programas podemos crear páginas web dinámicas que se generan de forma automática.

Para que el navegador pueda llegar al servidor web, el servidor debe tener asignada una
dirección IP única que identifica el equipo en la red.
Cuando el navegador hace una petición al servidor web, utiliza un nombre que identifica al
servidor, y esta solicitud se transmite a un servidor DNS. Éste resuelve
resuelve el nombre y devuelve la
dirección IP que corresponde al nombre. Ahora, la solicitud del navegador se encamina al servidor
web correcto. La información que el usuario proporciona al navegador para conectar con un
servidor web se llama URL (Uniform Resource
Resou Locator) que indica la forma de acceder a un
recurso utilizando un protocolo de comunicación.

Una URL consta de los siguientes elementos:

- Protocolo a utilizar: http, https, ftp, telnet, etc.


- “://” que hace de separador.
- La dirección IP o el nombre del servidor que contiene el recurso.
- La ruta al recurso al que se quiere acceder (directorio y subdirectorios)
- Recurso al que se quiere acceder
3
Existen muchos servidores web, pero los dos más conocidos e importantes son Apache e IIS
(Internet Information Services). Apache suele utilizarse en entornos tipo UNIX y LINUX (Aunque
existe apache para windows) mientras que IIS se utiliza en entornos Windows.

Ejercicio 01. Instalación del servidor web Apache en Ubuntu.

Abrir Ubuntu Desktop


Comprobar que está el paquete instalado con dpkg --list | grep apache
Instalar apache2 con: sudo apt-get install apache2 si no lo estuviera
Comprobar el servicio con ps -e | grep apache
Ver la versión de apache instalada con apache2 -v
El servicio se para e inicia con sudo /etc/init.d/apache2 (start / stop / restart / reload / status)
También con service apache2 restart
Ver página de inicio con http://localhost
Acceder a la carpeta /var/www/html con gksudo nautilus
Renombrar index.html a .bak y crear un nuevo index.html que contenga:

<html>
<head>
<title> Pagina de la asignatura SR </title>
</head>
<body>
<center>
<h1> Bienvenidos al servidor Apache2 </h1>
<h2> Servicios en Red </h2>
</center>
</body>
</html>

3.2. El cliente web.

El cliente web o navegador web es una aplicación que permite visualizar páginas web
alojadas en servidores web. Es capaz de interpretar código HTML mostrando el contenido de la
página en pantalla, y si la página lo permite, interactuar con ella o navegar a través de enlaces a
otras páginas web.
Las páginas web pueden contener texto, imágenes, vídeos y otros elementos multimedia. Su
visualización a veces requiere de complementos que se añaden al navegador y quedan integrados en
él.
Además, se pueden ejecutar determinadas aplicaciones que aumentan la funcionalidad de las
páginas:

- Aplicaciones que se ejecutan en el cliente web: El servidor envía el código al navegador y


éste lo ejecuta. Suele estar escrito en Javascript o en Java.

- Aplicaciones que se ejecutan en el servidor web: Generan un código HTML que es enviado
al navegador. Éste lo interpreta y lo muestra al usuario. Suele estar escrito en PHP, Perl, Python,
Java, etc.

Los navegadores más utilizados son: Google Chrome, Mozilla Firefox, Safari, Opera.

4
4. Configuración del servidor web en Linux.

El archivo principal de configuración del servidor apache en Linux se encuentra en


/etc/apache2/apache2.conf
En Windows el archivo de configuración se llama httpd.conf
Es recomendable hacer una copia de seguridad del archivo antes de modificarlo, ya que si
apache detecta errores en el archivo de configuración, no arrancará.

4.1. Configuración global de Apache.

Principales archivos de configuración del servidor Apache en la carpeta /etc/apache2:

- apache2.conf Fichero principal de configuración


- envvars Usuario y grupo con el que se ejecutará el servidor apache
- ports.conf Puertos en los que escucha el servidor
- Carpeta mods-available Módulos disponibles
- Carpeta mods-enabled Módulos activos
- Carpeta sites-available Hosts virtuales disponibles
- Carpeta sites-enabled Host virtuales activos

Las carpetas terminadas en “enabled” contienen enlaces simbólicos a los archivos de


configuración que están situados en la carpeta de igual nombre pero acabada en “available”. Por
ejemplo, en la carpeta “sites-enabled” hay un archivo llamado “@000-default.com” que no es más
que un enlace simbólico al archivo “000-default.com” de la carpeta “sites-available”. La existencia
del enlace simbólico en la carpeta “enabled” indica a Apache que cargue el módulo correspondiente
o que cree el host virtual correspondiente.

El archivo .htaccess es un archivo de texto oculto que puede estar en cualquiera de las
carpetas donde el servidor almacena las páginas web y sirve para definir directivas de acceso
locales a esa carpeta en particular. (Para poder usar archivos .htaccess en un directorio hay que
incluir la directiva AllowOverride en la sección <Directory> correspondiente a ese directorio)

Los usos principales de .htaccess son:

- Impedir el listado de los archivos de un directorio.


- Redireccionar el tráfico web.
- Personalizar las páginas de error.
- Restringir el acceso a determinados archivos.
- Impedir el acceso a determinadas IPs o rangos de IP.

Se debería evitar usar los ficheros .htaccess si se tiene acceso al fichero de configuración
principal de httpd. Usar ficheros .htaccess ralentiza el servidor Apache http. Cualquier directiva que
se pueda incluir en un fichero .htaccess estará mejor configurada dentro de una sección Directory,
tendrá el mismo efecto y mejor rendimiento.
Los ficheros .htaccess deberían usarse cuando un proveedor te permite hacer modificaciones
de configuración en un contexto de directorio, pero sin tener acceso de root en el servidor. En el
caso de que el administrador no esté dispuesto a hacer cambios frecuentes en la configuración,
puede que sea necesario permitir a usuarios individuales realizar estos cambios de configuración en
ficheros .htaccess por ellos mismos. Lo cual ocurre a menudo, por ejemplo, en casos donde los ISP
están albergando múltiples sitios web de usuario en una sola máquina, y quieren que sus usuarios
tengan la posibilidad de modificar sus configuraciones.
5
Más información en https://httpd.apache.org/docs/trunk/es/howto/htaccess.html

Revisar el contenido de los archivos de configuración:

apache2.conf, envvars y ports.conf


Y en la carpeta sites-enabled: 000-default.com.

4.2. Módulos de Apache.

Los módulos de apache son extensiones que permiten al servidor aumentar sus prestaciones.
Son módulos de carga dinámica (Dynamic Shared Object). Podemos encontrarlos en la carpeta
/usr/lib/apache2/modules en forma de archivos acabados en “.so”.

Para que apache sepa qué módulos debe cargar al arrancar el servicio, utiliza los directorios
mods-available (módulos disponibles) y mods-enabled (módulos activados) de la carpeta
/etc/apache2. Cuando se activa un módulo de apache, se crea un enlace simbólico del archivo
correspondiente del directorio mods-available en mods-enabled. Cada módulo de apache tiene
asociado dos archivos: nombre_modulo.load y nombre_modulo.conf. El primero contiene la carga
del módulo y el segundo la configuración.

El comando para activar un determinado módulo sería:

sudo a2enmod nombre_modulo

Lo que hace este comando es crear automáticamente los enlaces simbólicos de los archivos
.load y .conf de ese módulo en la carpeta mods-enabled.

Para desactivar un módulo usaremos:

sudo a2dismod nombre_modulo

Lo que hace este comando es eliminar los enlaces simbólicos de ese módulo en la carpeta
mods-enabled.

Ejercicio 02. Utilización de módulos de Apache2.

Abrir Ubuntu Server


Ir a la carpeta /etc/apache2/mods-available y listar el contenido
Vemos que exiten los archivos userdir.load y userdir.conf
El módulo userdir permite a cualquier usuario registrado en el servidor crear su propio
espacio web en un directorio dentro de su home
Ir a la carpeta /etc/apache2/mods-enabled y listar
Vemos que no existen los archivos del módulo userdir
Activamos el módulo userdir con sudo a2enmod userdir
Reiniciamos el servidor apache con sudo /etc/init.d/apache2 restart
Si hacemos ls ahora sí estarán los archivos del módulo
Vemos el contenido de userdir.load y userdir.conf
En userdir.conf vemos que la carpeta donde estarán los archivos HTML de los usuarios se
llamará public_html. También vemos que el usuario root está desactivado. La sección <Directory>
especifica las directivas de acceso para la carpeta public_html
Ahora creamos el usuario alumno y luego la carpeta /home/alumno/public_html
6
Dentro de la carpeta creamos un archivo index.html:

<html>
<head>
<title> Pagina de alumno </title>
</head>
<body>
<center>
<h1> Pagina web del usuario alumno </h1>
<h2> Asignatura Servicios en Red </h2>
</center>
</body>
</html>

Ahora abrimos Windows7 y en el navegador escribimos:


http://IP_del_servidor/~alumno
(El carácter ~ se obtiene con ALT-126 o ALTGR-4 y ESP)
Veremos el documento HTML que acabamos de crear

Volvemos a Ubuntu Server y desactivamos el módulo userdir


sudo a2dismod userdir
sudo /etc/init.d/apache2 restart
En la carpeta mods-enabled vemos que ya no están los enlaces simbólicos de userdir

Volvemos a Windows7 y recargamos la página. Aparece el mensaje “Not Found”

4.3. Hosts virtuales en Apache.

Gracias al uso de hosts virtuales, Apache permite la posibilidad de alojar varios dominios en
una sola máquina, ejecutando más de un sitio web en el mismo servidor.

Apache soporta dos tipos de hosts virtuales:

1. Hosts virtuales basados en nombres: permiten alojar varios nombres de host en una misma
máquina. Por ejemplo, para crear un host virtual que responda al nombre de progresa.com o
www.progresa.com, escribiremos en el archivo de configuración del host virtual correspondiente las
siguientes líneas:

<VirtualHost *:80>
ServerName progresa.com
ServerAlias www.progresa.com

2. Host virtuales basados en IP: Una máquina responde de diferente manera a diferentes
direcciones IP. Tenemos múltiples IPs asignadas al servidor y queremos que cada una de ellas
soporte un sitio web. Por ejemplo, para crear un host virtual que responda las peticiones dirigidas a
la dirección IP 192.168.1.20, escribiremos en el archivo de configuración del host virtual
correspondiente: <VirtualHost 192.168.1.20>

Para que apache sepa qué hosts virtuales debe cargar al arrancar el servicio, utiliza los
directorios sites-available (sitios disponibles) y sites-enabled (sitios activados) de la carpeta
/etc/apache2. Cuando se activa un host virtual, se crea un enlace simbólico del archivo
7
correspondiente del directorio sites-available en sites-enabled. Cada host virtual que creemos
tendrá asociado un archivo: nombre_de_host.conf. El archivo que contiene la configuración por
defecto del host de apache se llama 000-default.conf.

El comando para activar un determinado host virtual sería:

sudo a2ensite nombre_de_host.conf

Para desactivar un host virtual usaremos:

sudo a2dissite nombre_de_host.conf

Ejercicio 03. Utilización de hosts virtuales en Apache2.

Abrir Ubuntu Server.


Vamos a crear el host virtual progresa.com
Primero creamos la carpeta donde alojaremos los archivos HTML con:
sudo mkdir /var/www/progresa.com
Dentro de la carpeta copiamos el archivo /home/alumno/public_html/index.html del ejercicio
anterior y lo editamos para personalizarlo: “Bienvenido a progresa.com”

Ahora vamos a la carpeta /etc/apache2/sites-available


Copiamos el archivo 000-default.conf con el nombre progresa.conf:
sudo cp 000-default.conf progresa.conf
Editamos el archivo con sudo nano progresa.conf
Añadimos las siguientes líneas:

ServerName progresa.com
ServerAlias www.progresa.com
ServerAdmin admin@cieep.com
DocumentRoot /var/www/progresa.com

Ahora activamos el host virtual con: sudo a2ensite progresa.conf


Reiniciamos el servidor con: sudo /etc/init.d/apache2 restart
Ahora abrimos la máquina virtual de Windows7
Como no disponemos de servidor DNS para asociar el dominio progresa.com a la dirección IP
del servidor, utilizaremos el archivo de configuración hosts
Abrimos el block de notas con derechos de administrador y editamos el archivo
C:\windows\system32\drivers\etc\hosts, añadiendo al final del mismo:

(Dir_IP_del_servidor) progresa.com
(Dir_IP_del_servidor) www.progresa.com

Desde el navegador accedemos a progresa.com y www.progresa.com


Comprobamos que si accedemos a la dirección IP del servidor aparece la página por defecto
de apache, y no la que creamos para el dominio progresa.com

8
4.4. Autenticación en Apache.

Cuando el servidor Apache recibe una petición para servir una página web, antes de ofrecerla
verifica que dicha petición está autorizada. Realiza las siguientes comprobaciones:

1. Autenticación: Comprueba la identidad del usuario. El usuario proporciona su nombre de


usuario y contraseña. Estos dos datos se llaman credenciales, y si el servidor comprueba que estas
credenciales coinciden con las almacenadas en su base de datos, la autenticación finalizará con
éxito.
Existen dos métodos de autenticación HTTP:

- Básico o simple: El nombre de usuario y la contraseña se envían sin cifrar al servidor.

- Digest: El nombre de usuario y la contraseña se envían cifrados al servidor.

Estos dos métodos solo autentican al usuario. Los datos que se envían del navegador al
servidor o viceversa no van cifrados, son formas de controlar el acceso a los recursos, pero que no
protegen el intercambio de información.

2. Autorización: El servidor debe comprobar si el usuario validado está autorizado para


acceder a la información que solicita. Para ello el servidor dispone de una lista de los usuarios que
pueden acceder a los recursos que ofrece.
En Apache2 la autorización se gestiona mediante la directiva <Directory> en los archivos de
configuración del servidor o mediante la utilización de archivos .htaccess.

3. Control de acceso: Establece y controla las máquinas que tienen acceso a un recurso, con
independencia del usuario que accede.
En Apache2 el control de acceso se gestiona mediante las directivas <Directory>, <Files> y
<Location> o mediante un archivo de configuración .htaccess para controlar un directorio concreto.

Para poder configurar la autorización y el control de acceso utilizando archivos .htaccess es


necesario incluir una directiva AllowOverride AuthConfig en la sección <Directory>
correspondiente a ese directorio.

Ejercicio 04. Autenticación básica en Apache2.

Abrimos Ubuntu Server


Comprobamos que el módulo de autenticación básica está activado buscando el archivo
auth_basic en la carpeta mods-enabled. Si no estuviera, habría que activarlo con:
sudo a2enmod auth_basic
Creamos la carpeta /var/www/html/restringido
Dentro de la carpeta copiamos el archivo /home/alumno/public_html/index.html del ejercicio
anterior y lo editamos para personalizarlo: “Carpeta Restringida”
Ahora editamos el archivo de configuración del host por defecto de Apache:
sudo nano /etc/apache2/sites-available/000-default.conf
Y añadimos las siguientes líneas:

9
<Directory /var/www/html/restringido>
AuthType Basic
AuthName “Archivos restringidos”
AuthUserFile /usr/usuarios
require valid-user
</Directory>

Para añadir al usuario “autorizado” en el archivo de usuarios /usr/usuarios usaremos el


comando: sudo htpasswd -cm /usr/usuarios autorizado
Vemos el contenido del archivo con: cat /usr/usuarios
Reiniciamos el servidor con: sudo /etc/init.d/apache2 restart
Ahora abrimos la máquina virtual de Windows7
En el navegador escribimos http://IP_del_servidor/restringido
Saldrá una ventana pidiéndonos el nombre de usuario y la contraseña
Si no escribimos los datos correctos no nos dejará entrar

4.5. Control de acceso en Apache2.

Cuando un usuario efectúa una petición HTTP al servidor, éste la puede atender o no en
función de la máquina desde la que se hace la solicitud.
Para gestionar esto, se utilizan las directivas Allow y Deny. La primera permite y la segunda
rechaza el acceso en función del nombre o la dirección IP de la máquina desde la que se hace la
solicitud de información.
El formato de la directiva Allow es:

Allow from direccion

direccion es la dirección IP o el nombre de dominio de la máquina. Se pueden indicar varias


direcciones o nombres de dominio.

El formato de la directiva Deny es:

Deny from direccion

De este modo podemos autorizar o prohibir el acceso de determinadas máquinas a


determinadas carpetas del servidor.
Si quisieramos autorizar el acceso a los usuarios de un dominio en particular y negar el acceso
a todos los demás usaríamos:

Order deny, allow


Deny from all
Allow from dominio.com

La directiva Order indica que primero se hace caso a la directiva Deny y luego a la directiva
Allow. Es decir, primero negamos el acceso a todos y luego autorizamos a dominio.com.

10
5. El servidor web seguro.

Un servidor web es seguro cuando garantiza la comunicación con el cliente web con
autenticación y confidencialidad.
El protocolo SSL (Secure Socket Layer) permite establecer una comunicación segura y
codificada entre el servidor web y el navegador. SSL trabaja conjuntamente con el protocolo HTTP,
creando un protocolo de transmisión de hipertexto seguro llamado HTTPS.
El protocolo HTTPS se basa en dos tipos de criptografía:

- Criptografía simétrica o de clave compartida.

- Criptografía asimétrica o de clave pública y privada.

Se utilizan ambos tipos.


La criptografía asimétrica se utiliza en los procesos de autenticación, ya que gracias al sistema
de clave pública permite autenticar usuarios e intercambiar la clave de sesión de forma segura, pero
resulta lenta para el cifrado durante la comunicación.
La criptografía simétrica se utiliza para la comunicación porque es rápida en el cifrado, pero
no es adecuada para la gestión de claves.

5.1. ¿Qué es la firma digital?

La firma digital es una porción de código que se adjunta a un mensaje para garantizar al
destinatario quién es el remitente del mismo y que la información no ha sido alterada. Se utiliza en
un entorno de clave pública y su objetivo es garantizar la integridad del mensaje y la identidad del
firmante.

El proceso de firma digital comprende estas fases:

1. El emisor aplica una función hash sobre los datos y genera un “resumen” del mismo.

2. El emisor cifra el “resumen” con su clave privada y lo convierte en una firma digital.

3. El emisor envía al receptor los datos, la firma y el certificado digital del origen.

4. El receptor aplica la función hash a los datos recibidos y genera el “resumen”.

5. El receptor descifra la firma digital con la clave pública del emisor y obtiene el “resumen”
generado por el emisor.

6. Si los dos “resúmenes” coinciden, podemos asegurar lo siguiente:

- El mensaje no ha sido modificado, con lo que se garantiza la integridad del mismo.

- El único usuario que lo ha podido firmar ha sido el emisor, con lo que se garantiza la
identidad del firmante, ya que es el único que posee la clave privada que se corresponde con
la clave pública con que se ha descifrado.

Todo este proceso es transparente al usuario.

11
El certificado digital es el conjunto de caracteres añadidos a un documento que acreditan al
autor del documento y garantizan la integridad de los datos. El certificado digital contiene la clave
pública del usuario y algunos datos personales, firmados digitalmente por una autoridad de
certificación (CA). La CA es un tercero de confianza que permite que personas que no se conocen
entre sí puedan confiar en los certificados que se presentan el uno a otro. El objetivo del certificado
digital es asociar una clave pública a un usuario
usuari determinado.

Un servidor web es seguro cuando utiliza una combinación del protocolo SSL (HTTPS) para
poder enviar la información cifrada y un certificado digital proporcionado por una CA.

5.2. ¿Cómo funciona SSL (Secure Socket Layer)?

El protocolo SSL garantiza que todo el intercambio de información llevado a cabo durante
una sesión se realiza de forma segura mediante encriptación.

El uso del protocolo SSL en una conexión TCP/IP proporciona:

- Confidencialidad: Cifra la información transmitida.


- Integridad del mensaje: Controla cualquier modificación intencionada o accidental en la
información mientras se transmite por internet.
- Autenticación del servidor: Asegura la identidad del servidor con el que se establece la
conexión y al que el usuario puede
de enviar información personal. Esto se logra con un certificado de
servidor.
- Autenticación de cliente: El servidor conoce la identidad del usuario y le permite o no el
acceso a áreas protegidas. Para ello, el cliente debe tener instalado un certificado de cliente en su
navegador, con el que el servidor puede identificar al usuario.

12
El protocolo SSL utiliza una clave de sesión que se genera en cada transacción. Cuanto mayor
sea la longitud de la clave, más difícil será romper la encriptación. La mayoría de los navegadores
soportan claves de sesión de 128 bits.

La comunicación se realiza en dos fases:

1. Fase de saludo (Handshaking): El cliente y el servidor se identifican mediante el


intercambio de claves públicas y llevan a cabo la autenticación utilizando certificados digitales.
2. Fase de comunicación: Se realiza el intercambio de datos utilizando una clave de
criptografía simétrica.

Los navegadores llevan incorporado un módulo SSL que se activa de forma automática
cuando es necesario, que suele ser al escribir https:// en la URL .

6. Activar la seguridad en Apache.

Vamos a configurar Apache como un servidor seguro utilizando el protocolo HTTPS.

6.1. Activar el módulo SSL.

Abrimos Ubuntu Server


En primer lugar activamos el módulo SSL con el comando:
sudo a2enmod ssl
A continuación Comprobamos con ls que se han creado los enlaces simbólicos en
/etc/apache2/mods-enabled
Para que se cargue el módulo, reiniciamos el servidor con: sudo /etc/init.d/apache2 restart
En el archivo de configuración /etc/apache2/ports.conf comprobamos que está configurada la
escucha por el puerto 443 si está cargado el módulo SSL.

6.2. Creación de un host virtual para conexiones seguras.

Vamos a la carpeta /etc/apache2/sites-available donde editamos el archivo default-ssl.conf y


escribimos:

ServerName progresa.ssl.com
DocumentRoot /var/www/ssl

Ahora activamos el host virtual con: sudo a2ensite default-ssl.conf


Reiniciamos el servidor con: sudo /etc/init.d/apache2 restart
Creamos la carpeta ssl con: sudo mkdir /var/www/ssl
Dentro de la carpeta ssl copiamos el archivo /home/alumno/public_html/index.html del
ejercicio anterior y lo editamos para personalizarlo: “Bienvenido al servidor SEGURO de progresa”

13
6.3. Obtención del certificado.

En un entorno real los certificados hay que solicitarlos a una autoridad de certificación, pero
nosotros lo que vamos a hacer es transformar nuestro servidor en una CA.

Primero tenemos que descargar el paquete apache2-ssl.tar.gz


Vamos a la carpeta /tmp y allí descargamos:
sudo wget ftp://ftp.psu.ac.th/pub/apache/apache2-ssl.tar.gz
Descomprimimos:
sudo gzip -d apache2-ssl.tar.gz
sudo tar -xf apache2-ssl.tar
Obtenemos 2 archivos: apache2-ssl-certificate y ssleay.cnf
Ahora copiamos los dos archivos:
sudo cp apache2-ssl-certificate /usr/sbin/
sudo cp ssleay.cnf /usr/share/apache2/
Creamos la carpeta /etc/apache2/ssl que es donde se guardará el certificado
sudo mkdir /etc/apache2/ssl
cd /etc/apache2/ssl
Creamos ahora el certificado con: sudo apache2-ssl-certificate -days 365
No pedirá información:

Country Name: ES
State or Province Name: Valencia
Locality Name: Valencia
Organization Name: Progresa
Organizational Unit Name: Progresa
Server name: progresa.ssl.com
Email address: progresa@cieep.com

Si listamos el contenido de la carpeta /etc/apache2/ssl veremos que hay dos archivos, uno de
ellos se llama apache.pem y contiene el certificado digital y las claves

Para finalizar editamos el archivo /etc/apache2/sites-available/default-ssl.conf y modificamos:

SSLEngine on
SSLCertificateFile /etc/apache2/ssl/apache.pem

Reiniciamos el servidor con: sudo /etc/init.d/apache2 restart

Ahora abrimos la máquina virtual de Windows7


En el navegador escribimos https://IP_del_servidor o https:// progresa.ssl.com
Nos dirá que el servidor no es seguro porque nuestro certificado es autofirmado, pero si
insistimos y creamos una excepción nos permitirá conectarnos aunque avisándonos de que la
conexión no es segura.

14
7. El servidor web en Windows (IIS).

IIS: Internet Information Services.

Ejercicio 05. Instalación del servidor web IIS en Windows Server.

Abrimos la máquina virtual de Windows Server


En el administrador del servidor marcamos “Roles” y luego a la derecha “Agregar roles”
En el asistente seleccionamos “Servidor web (IIS)”
Dejamos las opciones por defecto e instalamos
Ahora en el menú desplegable de la izquierda, debajo del icono roles, tenemos el servidor web
Si pulsamos en el icono del servidor web IIS, tendremos a la derecha varias opciones de
configuración: El visor de eventos, los botones para parar/iniciar/reiniciar el servidor y la opción de
agregar o quitar servicios de rol (aquí podemos instalar el servidor FTP)
Si desplegamos el icono, aparece el administrador de IIS. Pulsamos sobre él y a la derecha
aparecen más iconos de configuración
Si desplegamos la carpeta “Sitios” llegamos a “Default Web Site” que desplegará a la derecha
varios iconos de configuración. Más a la derecha están los menús de “Configuración básica…” y
“Configuración avanzada…”
Con botón derecho obtenemos todas las opciones de configuración del host
Desde la carpeta “Sitios” con botón derecho “Agregar sitio web…” podemos crear un nuevo
host
Abrimos Windows 7 y en el navegador tecleamos la dirección IP de Windows Server. Vemos
aparecer la página por defecto del servidor IIS

Cuestionario de prueba: https://goo.gl/o6HAZS

15

You might also like