Acceso a carpetas seguras

Introducción

Una página web segura o un sitio web seguro es un sitio web que utiliza el protocolo https en lugar de utilizar el protocolo http.

El protocolo https es idéntico al protocolo http con la excepción de que la transferencia de información entre el cliente (navegador web) y el servidor (servidor web) viaja a través de Internet cifrada utilizando robustos algoritmos de cifrado de datos proporcionados por el paquete OpenSSL.

Los algoritmos de cifrado utilizados reunen las características necesarias para garantizar que la información que sale desde el servidor hacia el cliente, esté cifrada y solamente pueda ser descifrada por el cliente y que la información que sale desde el cliente hacia el servidor, esté cifrada y solamente pueda ser descifrada por el servidor. Si durante la transferencia de la información un 'hacker' hiciera copia de los paquetes de datos e intentara descifrarlos, los algoritmos garantizarían que no podría hacerlo por fuerza bruta (probando todas las claves posibles) en un plazo mínimo de varios años.

Durante la transmisión, se utilizan algotirmos de cifrado simétricos, pero para intercambiar las claves de cifrado, hay una sesión inicial de cifrado asimétrico.

Módulo ssl para apache2

Al instalar apache2 se instala también el módulo ssl para apache2, por lo que no es necesario instalar ningún paquete adicional. Tan solo debemos generar un certificado para el servidor y activar el módulo ssl.

Generar el certificado

Para que nuestro servidor pueda servir páginas seguras con el protocolo https, necesita un certificado. Dicho certificado permitirá que nuestro servidor utilizar cifrado asimétrico para intercambiar las claves de cifrado con los clientes, antes de iniciar una trasmisión segura de información. Inicialmente, el cliente deberá aceptar el certificado del servidor, ya que generaremos un certificado autofirmado. Si queremos evitarlo, deberíamos contratar un certificado a una entidad certificadora confiable, pero tiene un coste que no merece la pena soportar en un entorno educativo. Para generar nuestro certificado autofirmado, ejecutaremos el comando:
// Generar certificado autofirmado
# apache2-ssl-certificate

Tan solo tendremos que responder a algunas preguntas sencillas sobre nuestra ubicación geográfica y el nombre de nuestra organización. A continuación vemos un ejemplo del uso del comando:

Después de la ejecución de comando apache2-ssl-certificate, se habrá generado el archivo /etc/apache2/ssl/apache.pem que contiene la claves que permitirán al servidor utilizar cifrado asimétrico. El siguiente paso será configurar un servidor virtual para que utilice dicho certificado.

Crear servidor virtual seguro en apache2

Primero crearemos una carpeta de nombre 'websegura' dentro de '/var/www'. Dicha carpeta será el raíz de documentos (DocumentRoot) de nuestro servidor virtual seguro, de modo que todo lo que coloquemos en dicha carpeta deba ser accedido vía 'https'. Eso lo indicaremos más adelante mediante el parámetro SSLRequireSSL. El protocolo https utiliza el puerto 443, por lo tanto, tendremos habilitar dicho puerto para que apache lo utilice:

 // Habilitar puerto 443. Añadir en /etc/apache2/ports.conf
Listen 443

Después debemos crear el servidor virtual en apache. Dicho servidor virtual dispondrá de una url de acceso diferente a la de nuestra web principal (websegura.ieslapaloma.com en nuestro ejemplo) y será accesible mediante https, por tanto tendremos que habilitar SSL e indicar la ruta del archivo que contiene el certificado. Todo ello lo haremos editando el archivo /etc/apache2/sites-available/default:

// Servidor virtual seguro.
// Añadir al principio en /etc/apache2/sites-available/default
NameVirtualHost websegura.ieslapaloma.com:443

// Añadir al final en /etc/apache2/sites-available/default
<VirtualHost websegura.ieslapaloma.com:443> ServerName websegura.ieslapaloma.com DocumentRoot /var/www/websegura SSLEngine On SSLCertificateFile /etc/apache2/ssl/apache.pem ErrorLog /var/log/apache2/error.log CustomLog /var/log/apache2/access.log combined </VirtualHost> <Directory "/var/www/websegura"> Options Indexes FollowSymlinks MultiViews AllowOverride None Order allow,deny Allow from all SSLRequireSSL </Directory>

Posteriormente debemos habilitar el módulo ssl del servidor apache:

// Habilitar el módulo ssl 
# a2enmod ssl

Finalmente reiniciamos el servidor apache:

// Reinicio de apache
# /etc/init.d/apache2 restart

Probando el acceso a la página web segura

Nota: Si no tenemos un DNS funcionando, debemos incluir en /etc/hosts una línea para resolver localmente el nombre de nuestro servidor por su IP, ejemplo: 192.168.1.239 websegura.ieslapaloma.com, ya que en este caso, navegar con la dirección IP no funcionará.

Para acceder a las páginas seguras de nuestro servidor web, tecleamos desde el navegador 'https://websegura.ieslapaloma.com'. Lo primero que se muestra es la alerta de seguridad que nos indica que el certificado no está emitido por una CA en la que confiamos:

Si pulsamos sobre el botón 'Examinar certificado' veremos la información tanto del certificado como de la entidad certificadora que lo firma:

Si aceptamos el certificado significa que, a pesar de estar firmado por una entidad certificadora que no es de confianza para el navegador (lo hemos firmado nosotros mismos), lo aceptamos. Tendremos que indicar al navegador si aceptamos el certificado para siempre o solo para ahora. Como tenemos la seguridad de que el certificado es bueno porque acabamos de crearle nosotros mismos, podemos aceptarlo para siempre y así el navegador no volverá a preguntarnos más sobre él ya que hemos indicado manualmente que confiamos en este certificado:

Ahora ya tenemos acceso a la web segura mediante el protocolo https lo que nos garantiza que la información de la página segura, antes de salir del servidor, ha sido cifrada y por tanto la trasferencia de datos desde el servidor a nuestro navegador se ha producido de forma segura. Al llegar a nuestro navegador, se han descifrado los datos. El candado cerrado que aparece abajo a la derecha en el navegador, indica que la trasferencia de datos se ha realizado de forma segura.

Como sabemos la ruta de la carpeta segura, si intentamos acceder a la carpeta segura utilizando el protocolo http yendo con el navegador a 'http://www.ieslapaloma.com/websegura', apache denegará el acceso ya que en 'httpd.conf' se ha especificado que la carpeta debe ser accedida mediante https:

Carpetas seguras de usuario

Si en el centro existiera la necesidad de que los profesores dispongan de una carpeta web segura donde poder colocar contenidos accesibles vía SSL, como serán casos excepcionales, una solución sencilla es crear una carpeta dentro de la carpeta '/var/www/websegura' para dicho profesor y para que éste tenga acceso de forma autónoma a subir contenidos a dicha carpeta, se le puede crear un usuario adicional cuyo home sea la carpeta correspondiente, ejemplo, para el profesor Javier podemos crear otro usuario llamado javier-s (javier-seguro) cuyo home sea /var/www/websegura/javier. Podría subir contenidos por ftp utilizando el usuario javier-s. El acceso a los contenidos desde un navegador sería yendo a la dirección https://websegura.ieslapaloma.com/javier

Este proceso habría que hacerlo para todos los profesores o departamentos de nuestro centro que requieran de carpeta segura.