Skip to content
This repository was archived by the owner on Aug 3, 2024. It is now read-only.

Latest commit

History

17 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Servidor HTTP simple

Introducci贸n

El proyecto consiste en un servidor HTTP simple que permite la descarga de archivos, como en cualquier servidor web. Soportando 煤nicamente el m茅todo GET, el servidor es capaz de responder a las solicitudes de los clientes, enviando el archivo solicitado en caso de que exista, o un mensaje de error en caso contrario.

Donde las cabeceras de las solicitudes no son de importancia, el servidor no las procesa, y simplemente las ignora. Por otro lado, las cabeceras de las respuestas son generadas autom谩ticamente por el servidor, entregando prioritariamente el tipo de contenido del archivo solicitado, y el largo del contenido en el caso que corresponda.

Si la ruta del archivo solicitado no cumple de cierta forma la siguiente expresi贸n regular: .[a-zA-Z0-9]+$, es decir, si no tiene una extensi贸n, el servidor entender谩 que se trata de un directorio, y buscar谩 el archivo index.html dentro de dicho directorio. En caso de no encontrarlo, responder谩 con un mensaje de error.

Extra En caso de considerarse la ruta un directorio y la solicitud no termina con /, el servidor realizar谩 la redirecci贸n (302) a la misma ruta, pero con / al final.

El protocolo HTTPS es soportado por el servidor, permitiendo la comunicaci贸n segura entre el cliente y el servidor. Para ello, es necesario especificar el certificado y la clave privada del servidor al momento de iniciar el programa. En caso de no especificarlos, el servidor solamente aceptar谩 conexiones HTTP.

Requisitos

Los requisitos para poder ejecutar el proyecto son los siguientes:

Compilaci贸n

Para instalar y compilar el proyecto es necesario ejecutar los siguientes comandos:

$ mkdir build
$ cd build
$ cmake ..
$ make

Uso

Para iniciar el servidor es necesario especificar el puerto en el que se va a escuchar. El servidor se ejecuta de la siguiente manera:

$ ./server -p <puerto> [-c <certificado> -k <clave>]

Si el programa no detecta la carpeta www en el directorio actual, se crear谩 la respectiva carpeta.

Generar certificado SSL

Se puede generar un certificado SSL para utilizarlo con el servidor. Para ello, es necesario tener instalado OpenSSL. Luego, se deben realizar los siguientes pasos:

  • Generar el certificado de la Autoridad de Certificaci贸n (CA):
$ openssl genrsa -out CA.key -des3 2048
$ openssl req -x509 -sha256 -new -nodes \
    -days 3650 -key CA.key -out CA.pem

Estos comandos generar谩n una clave privada (CA.key) y un certificado de la CA (CA.pem) que se utilizar谩 para firmar el certificado del servidor.

Una vez generado el certificado de la CA, se crea el certificado para el servidor y se firma con el certificado de la CA.

  • Generar el certificado del servidor:
$ openssl genrsa -out <nombre>.key -des3 2048
$ openssl req -new -key <nombre>.key -out <nombre>.csr
$ openssl x509 -req \
    -in <nombre>.csr \
    -CA CA.pem \
    -CAkey CA.key \
    -CAcreateserial \
    -days 3650 \
    -sha256 \
    -extfile <(echo -e "authorityKeyIdentifier = keyid,issuer\nbasicConstraints = CA:FALSE\nkeyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment\nsubjectAltName = @alt_names\n\n[alt_names]\nDNS.1 = localhost\nIP.1 = 127.0.0.1") \
    -out <nombre>.crt

Por 煤ltimo, es necesario importar el certificado CA.pem en el navegador web que se utilizar谩 para acceder al servidor. Esto permitir谩 que el certificado sea reconocido como v谩lido y no se muestre un mensaje de advertencia en el navegador. (Opcional)

Una vez realizado lo anterior, se puede iniciar el servidor con el certificado y su respectiva clave privada:

$ ./server -p <puerto> -c <nombre>.crt -k <nombre>.key

Una vez iniciado el servidor, se puede acceder a los archivos que se encuentran en la carpeta www desde un navegador web o utilizando alg煤n servicio como Postman, Hoppscotch o Netcat. Por ejemplo, si el servidor se est谩 ejecutando en el puerto 8080, se puede acceder a la p谩gina index.html desde la siguiente URL: http://localhost:8080/.

Cr茅ditos

Proyecto realizado por:

  • Francisco Cea
  • Oscar Castillo
  • Mat铆as Gayoso

About

馃寪 Laboratorio Redes de Computadores 2023-1 (503353) | Servidor HTTP simple

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages