Giter Club home page Giter Club logo

laboratorioredes-2's Introduction

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

laboratorioredes-2's People

Contributors

fcocea avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    馃枛 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 馃搳馃搱馃帀

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google 鉂わ笍 Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.