Secretaría de Educación Pública Tecnológico Nacional de México Instituto Tecnológico de Ciudad Guzmán Ingeniería en Sistemas Computacionales Administración de redes Unidad 2 Servicios de red Reporte de práctica HTTP Y HTTPS Docente: Felipe Alfonso Ordóñez García Equipo 9 Ciudad Guzmán Jalisco a 30 de marzo de 2019 Introducción En el documento se redactara, instalara y configurara un servidor HTTP cuyo sistema operativo es Ubuntu, pero debido a las condiciones del equipo actual se utilizara una máquina virtual llamada Virtual Box, además se configurara un cliente. ¿Qué es un servidor HTTP? HTTP es un protocolo utilizado para solicitar y transmitir archivos a través de Internet u otra red informática, especialmente páginas web y componentes de páginas web, está orientado a transacciones y opera a través de un esquema petición-respuesta, entre un “cliente” y un “servidor”. Al cliente que efectúa la petición (un navegador o un spider) se lo conoce como “user agent” (agente del usuario, como es el Internet Explorer). HTTP es el protocolo usado en cada transacción Web (WWW), define la sintaxis y la semántica que utilizan los elementos software de la arquitectura web (clientes, servidores, proxis) para comunicarse. Es un protocolo sin estado, es decir, que no guarda ninguna información sobre conexiones anteriores. El servidor es aquel en donde se almacenan las páginas de Internet. A la información transmitida se la llama recurso y se la identifica mediante un URL. Los recursos pueden ser archivos, 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. Instalación del servidor HTTP 1. Para instalar el servidor basta con poner un comando. El comando es el siguiente: sudo apt-get install apache2 Tras ejecutar el comando, se nos instalará el servidor Apache. 2. Tras instalar el servidor, instalaré también el intérprete de PHP. Para ello debemos introducir el comando a continuación: sudo apt-get install php7 libapache2-mod-php7 Tras ejecutar este comando, se nos instalará el php, la última versión. 3. Ahora después de instalar el servidor web y el intérprete, podemos comenzar a configurar el servidor. CONFIGURACION 1. Comenzaremos configurando el fichero por defecto del servidor, para que en vez de mostrarnos la página de Apache cuándo ponemos su IP en una URL del navegador del cliente, nos salga lo que nosotros queramos poner. En mi caso será un fichero “.php”, de ahí que hayamos instalado el intérprete. Nos vamos a la ruta “/var/www/html” y creamos un fichero en su interior, en esta carpeta introducimos ese fichero que sustituirá al que viene por defecto. 2. En el fichero introduciré en mi caso ese contenido, que nos mostrará por pantalla la versión de php y demás información sobre este. 3. Entramos en el fichero “dir.conf” para poner ese fichero que hemos creado anteriormente en primer lugar para que nos salga, en vez de el de por defecto. La ruta es “sudo nano /etc/apache2/mods-available/dir.conf“. 4. Colocaremos el primero el nombre de nuestro fichero, en nuestro caso info.php. Como se puede observar en la imagen he introducido el nombre del fichero que he creado anteriormente y lo he colocado por delante de los que vienen por defecto. Esto quiere decir que al cargar la web buscará primero si hay un fichero con el “info.php“, si no lo encuentra buscará el siguiente el “index.html” y así sucesivamente. Al colocar este al principio la página por defecto del servidor cargará con el contenido de este archivo “info.php“. 5. Tras esto pasos ya tendríamos cambiado nuestro fichero por defecto, reiniciando el servicio con el comando “sudo /etc/init.d/apache2 restart” ya estarían los cambios aplicados. Vamos al siguiente paso de la configuración que es el certificado SSL. 6. Primero instalamos el OpenSSL, que es el programa con el que generaremos el certificado. Introducimos el siguiente comando: sudo apt-get install openssl Una vez instalador vamos a ver cómo generar el certificado. 7. Primero crearemos la llave privada, que será de utilidad para generar el certificado. Crearemos una llave de 1024 bits, con el algoritmo RSA. Debemos ejecutar el siguiente comando “sudo openssl genrsa -out server.key 1024“. sudo openssl genrsa -out server.key 1024 8. Ahora pasamos a crear un CSR (Create Signing Request), siglas que en español significan Crear Solicitud de Firma de Certificado. Definiremos datos como el dominio, organización, ubicación, etc… podemos generarlo las veces que queramos así que no nos preocupemos si nos equivocamos. Si vas a adquirir un certificado SSL de un proveedor que esté autorizado, durante la gestión, el proveedor les pedirá este archivo para crear nuestro certificado. Para generar el CSR ejecutamos el comando “sudo openssl req -new -key server.key -out server.csr“. Introducimos nuestro país en formato ISO, es decir de dos letras. Introducimos la provincia, la localidad, el nombre de nuestra organización, el sector de la organización, el nombre del dominio (he puesto la IP de mi servidor, pero lo adecuado es poner el dominio en el que queremos el certificado, aunque previamente ya he generado uno para el dominio que crearé en el host virtual “listo.com”). Y por último el correo de contacto, la contraseña y el nombre opcional de la compañía lo he dejado en blanco puesto que no es de extrema importancia. 9. Ahora generaremos el certificado SSL y para ello necesitaremos tanto la llave privada que hemos creado, como el CSR. Introducimos el comando “sudo openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt“. El parámetro days nos define la fecha en la que expira el certificado. 10. Copiamos como se observa en la imagen los dos archivos a la carpeta “certs”. Para ello usamos los comandos “sudo cp server.crt /etc/ssl/certs/” y “sudo cp sercer.key /etc/ssl/private/“. 11. En este paso habilitamos el médulo del SSL en Apache con el comando “sudo a2enmod ssl“. 12. Vamos a editar el archivo del SSL. Nos vamos a la ruta “/etc/apache2/sites-available” y una vez ahí ejecutamos el comando “sudo nano default-ssl.conf“. En este fichero nos interesa la primera parte, en “ServerAdmin” colocamos el correo del administrador. En “ServerName” el dominio. Y por último en “DocumentRoot” la ruta donde se encuentra. Una vez configurado el certificado en el archivo anterior, procedemos a su habilitación. 13. Se ejecuta el comando “sudo a2ensite default-ssl“. 14. Se ejecuta el siguiente comando para recargarla: sudo service apache2 reload Ya hemos acabado con el certificado SSL, y por ello cedemos el turno a los host virtuales, crearé dos host y uno de ellos llevará https y el otro una carpeta a la que accederemos mediante autentificación. 15. Primero debemos irnos a la ruta “/var/www“, una vez ahí crearemos dos carpetas, una por cada host. Como se aprecia en la imagen yo tengo a ar.equipo9.com y listo.com 16. En ellas crearé un fichero “.html” Este lo he creado dentro de ar.equipo9.com 17. Este otro se encuentra dentro de listo.com Ahora que hemos creado las carpetas, vamos a procedes a configurar los virtual host. 18. Nos vamos a la ruta “/etc/apache2/mods-enabled”. Por defecto como hemos visto al principio, Apache incluye un archivo llamado “000-default.conf” y sobre el cual podemos basar nuestra configuración inicial, yo he copiado ese archivo dos veces y le he puesto el nombre de “ar.equipo9.com.conf” y al otro “listo.com.conf”. Entramos a los dos archivos para ver la configuración, de esos host. 19. Ahí vemos la configuración del host listo.com, al copiar el archivo por defecto que configuración, solo he cambiado los datos y adaptarlo a mi host. El número 443 es el puerto, lo he cambiado del 80 al 443 puesto que es el dominio que tendrá https. En ServerAdmin colocamos el correo del administrador del host, en ServerName el nombre del dominio, en ServerAlias el nombre completo del dominio y en el DocumentRoot el directorio principal donde se ubican los ficheros web. 20. Este sería el otro fichero de configuración del otro host. Tras crear y configurar los host virtuales nos queda activar los nuevos sitios, para ello usaremos la herramienta ya usada anteriormente “a2ensite”. 21. Ejecutamos el comando “sudo a2ensite listo.com.conf” y para activar el otro sitio “sudo a2ensite joaquin.com.conf“. Tras acabar con los host virtuales, llegamos a la última parte de esta guía de configuración es la autenticación en una carpeta privada. 22. Con el siguiente comando “sudo a2emod authnz_ldap“, habilitaremos dicha cosa, tras esto reiniciamos servicio para que se aplique. 23. En la ruta”/var/www/ar.equipo9.com“, que es donde se encuentra uno de mis host, crearé una carpeta que se llame privado. Dentro de ella colocare un archivo “.html”, por ejemplo. 24. En este paso vamos a la ruta “/etc/apache2” y creo una carpeta a la que yo llamaré como se ve en la imagen, ar.equipo9.com. 25. Ahora crearé el usuario que tendrá acceso a la carpeta que hemos creado anteriormente llamada privado. Para ello se introduce el comando “sudo htpasswd -c /etc/apache2/listo.com/passwords alex“, como se observa pongo la ruta de la carpeta que he creado para que se cree la carpeta passwords y el usuario sea alex. Tras ejecutar el comando pedirá una contraseña que será la que habrá que introducir para acceder a esa carpeta que hemos creado con el nombre de privado. Por último debemos introducir unos parámetros en el archivo de configuración del host con la carpeta que requiere autentificación en este caso el host “listo.com”. 26. Introducimos el comando “sudo nano /etc/apache2/sites-available/listo.com.conf“, una vez dentro del archivo, rellenamos con los parámetros que vemos en la imagen. El AuhName es el mensaje que saldrá cuándo nos pide el usuario y contraseña. El AuthUserFile es la ruta del fichero que contiene el usuario y contraseña. En el Require user, ponemos el usuario en concreto. El Order indica el orden de ejecución de las directivas Allow y Deny. Y el Allow especifica los equipos a los que se les permite el acceso, si ponemos Deny denegariamos el acceso a los equipos que indiquemos. 27. Ahora tras acabar la configuración nos toca reiniciar el servicio “sudo /etc/init.d/apache2 restart” y probarlo en un cliente. Pruebas 1. Este es el host el cual lleva certificado SSL aunque no nos lo haya dado una empresa certificadora que este en la lista de nuestro navegador. 2. Aquí tenemos el host, pero esta vez entramos a la carpeta privada y nos pide autentificación. 3. Este es el otro host que hemos creado. CONCLUSION Gracias a estos protocolos es que se puede realizar la transferencia y solicitud de archivos a través de internet (o alguna red informática similar), generalmente en páginas web. El HTTPS, además de cumplir las dos funciones mencionadas, también se basa en SSL/TLS, por lo que resulta más segura la transferencia de contenidos, haciéndolo muy recomendaable (si no que obligatorio) para páginas web que realicen actividades que involucren el uso de información personal, pero al utilizar HTTPS no todo es color de rosas, pues la velocidad de conexión quien se ve afectada ya que, debido a su naturaleza, al implementar el esquema de “certificado”, el cual está firmado por alguna autoridad de la web que valida que la página utilizando HTTPS realiza un cifrado y descifrado de todos los datos que se manejan.