Documentos de Académico
Documentos de Profesional
Documentos de Cultura
FACULTAD DE INGENIERÍA
ASEGURAMIENTO DE PLATAFORMAS
SERVICIO WEB SEGURO (HTTP SOBRE SSL)
Cada persona dispondrá de un computador con una máquina virtual Ubuntu instalada, para
efectuar la práctica. Los resultados de esta práctica, y las respuestas a las preguntas que aparecen
en esta guía de laboratorio, deberán consignarse en un informe de laboratorio, que será entregado
la clase siguiente. Debe notarse que algunas de las preguntas de la guía pueden exigir
investigación adicional a la práctica.
La primera actividad de esta práctica consiste en crear una autoridad de certificación. Recordemos
que una autoridad de ceritificación actúa como un notario de la red, expidiendo certificados de
identidad para servidores y para usuarios de la red. Existen autoridades de certificación de alcance
mundial, tales como Verisign, Thawte, Comodo y RSA Security, que expiden certificados mediante
el pago de una determinada suma de dinero. Una autoridad de certificación propia permite ahorrar
costos, siempre y cuando sea posible distribuir el certificado de dicha autoridad a todos los
computadores que se vayan a conectar con nuestros sistemas.
• Instale la máquina virtual Ubuntu 10.04, si aún no lo ha hecho. Arránquela e ingrese como
usuario usuario, con contraseña Password1.
• Ejecute el comando sudo apt-get update. Esto hará que el sistema operativo
actualice sus catálogos de software, con el fin de obtener las versiones más recientes de
los paquetes que vamos a instalar.
• A continuación instalaremos OpenSSL, una implementación de SSL de código abierto.
Ejecute el comando sudo apt-get install openssl. Es posible que aparezca un
mensaje que indica que el paquete ya está instalado (openssl is already the
newest version).
• Asegúrese de que su máquina virtual Ubuntu cuenta con una dirección IP fija. Esto es
importante, ya que los certificados de identificación de un servidor Web seguro llevan
normalmente el nombre canónico del host en el DNS, o su dirección IP. En caso de no
contar con una dirección IP fija, haga los cambios necesarios en la configuración de la
máquina virtual.
• Luego ejecute el comando sudo su, para obtener un shell con privilegios administrativos.
• Ejecute la siguiente serie de comandos, para crear un directorio de trabajo en donde se
almacenarán los certificados:
Cuando se le solicite la passphrase, escriba una contraseña que pueda recordar fácilmente. Debe
tenerse mucho cuidado con esta clave, ya que quien la posee, tiene la CA bajo su control!
Ahora, vamos a crear el certificado de clave pública de la CA. Ejecute para ello, el comando
openssl req -new -x509 -days 365 -key ca.key -out ca.crt, que creará un certificado
X.509 tomando la clave del archivo ca.key, y grabándola en el archivo ca.crt. Una vez invocado el
comando, el sistema desplegará lo siguiente:
Introduzca la contraseña que empleó para asegurar la clave de la CA. El programa recolectará los
datos necesarios para crear el nombre único (distinguished name, DN) del certificado:
Aquí va el departamento de la empresa que expide el certificado. Puede responder, por ejemplo,
“Seguridad Informática”.
Este es el nombre de la CA como tal. Puede responder “CA del equipo x.x.x.x”, donde x.x.x.x
representa su dirección IP.
Con esta información, el sistema procederá a crear el certificado. Liste el directorio para ver los
archivos que se han creado hasta ahora. Puede revisar el contenido del archivo de la clave
mediante el comando:
A continuación, crearemos el certificado que se necesita para identificar a nuestro servidor web. La
característica quizá más importante de este certificado es que contiene el nombre o dirección IP
del servidor en su campo Common Name (CN).
Lo primero que se debe hacer es crear un par de claves (pública y privada) para identificar al
servidor. La clave privada permanecerá en el servidor, y le permitirá a dicho servidor desencriptar
toda la información que le llegue encriptada con la clave pública correspondiente. La clave pública
irá en el certificado; este certificado será entregado por el servidor a todo computador que intente
iniciar una conexión SSL con él.
La clave se crea de manera similar a la clave de la CA. Los comandos que usted debe introducir
están en negrillas:
El par de claves quedará en el archivo server.key. No olvide usar una contraseña que recuerde
fácilmente.
Ahora, se procede a generar un archivo de solicitud de certificado, empleando para ello el par de
claves que acabamos de generar. La solicitud de certificado contiene la clave pública, junto con los
datos de identificación necesarios.
Por último, debe someterse el archivo de solicitud a la CA. La CA firmará esta solicitud con su
clave privada, y la convertirá en un certificado válido. Ejecute el siguiente comando:
# openssl x509 -req -days 365 -in server.csr -CA ca.crt -CAkey ca.key -set_serial
01 -out server.crt
Signature ok
subject=/C=CO/ST=Valle del Cauca/L=Cali/O=Universidad Icesi/OU=Seguridad
Informacion/CN=192.168.230.217
Getting CA Private Key
Enter pass phrase for ca.key: *****
El comando instruye a OpenSSL para que cree un certificado con un año de validez a partir del
archivo de solicitud, fijando su número de serie en 01, firmándolo con la clave de la CA, y
almacenándolo en el archivo server.crt. Introduzca la contraseña de la clave de la CA cuando
se le solicite.
Examine el contenido del certificado de la misma manera como examinó el contenido del
certificado de la CA.
Es de notar que el archivo de clave privada del servidor (server.key) quedó protegido por una
clave. Si este archivo se usa tal como está en la configuración del servidor Web, se necesitará
digitar la contraseña cada vez que se arranque el servidor web, o aún peor, se necesitará incluir la
contraseña en el script de arranque del servidor web. Para evitar esto, se puede crear una versión
no protegida del archivo de claves del servidor, de la siguiente manera:
Tras ejecutar los tres comandos, la versión asegurada de la clave del servidor quedará en el
archivo server.key.secure, y la desasegurada, en server.key.
Una vez finalice la instalación, ejecute los siguientes comandos para crear una copia de la clave y
el certificado del servidor que creó en el paso anterior, en el directorio de configuración de Apache:
sudo su
cd /etc/apache2
mkdir ssl
chmod 700 ssl
cd ssl
cp /root/certs/server.key .
cp /root/certs/server.crt .
chmod 400 *
Note los cambios de permisos. Recuerde que el archivo server.key es de uso delicado, pues si
cae en malas manos, quien lo obtenga podría desencriptar todas las conversaciones seguras con
el servidor!
a2enmod ssl
ln –s /etc/apache2/sites-available/default-ssl /etc/apache2/sites-enabled/000-
default-ssl
Cree copias de los archivos de configuración de Apache. Esto es para que pueda volver a la
versión original en caso de cometer algún error:
cd /etc/apache2/sites-available
cp default default.orig
cp default-ssl default-ssl.orig
Cree ahora los directorios DocumentRoot (es decir, los directorios que contendrán las páginas
web) del servicio web inseguro y del seguro:
mkdir /var/www/html
mkdir /var/www-ssl
mkdir /var/www-ssl/html
<html>
<head>
<title>Servidor seguro de [su nombre]</title>
</head>
<body>
Esta es una página en el espacio seguro del servidor de [su nombre].
Puede ensayar a hacer una captura con Wireshark de esta conexión...
lo más seguro es que no pueda ver nada de esto! :)
</body>
</html>
<VirtualHost *:80>
ServerAdmin webmaster@x.x.x.x
ServerName x.x.x.x:80
DocumentRoot /var/www/html
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/html/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
Modifique también los siguientes parámetros del archivo default-ssl (en negrillas). Reemplace
x.x.x.x por la dirección IP fija de su servidor Ubuntu:
<VirtualHost *:443>
ServerAdmin webmaster@x.x.x.x
ServerName x.x.x.x:443
DocumentRoot /var/www-ssl/html
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www-ssl/html/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
SSLEngine on
Finalmente, reinicie el servidor para que todos los cambios surtan efecto:
Ahora, intente acceder al servidor del compañero en modo seguro (https://x.x.x.x). Qué mensaje de
error obtiene? Por qué?
• Pídale a su compañero una copia del archivo ca.crt que él creó en la primera parte del
laboratorio.
• Acceda en Firefox por el menú Edit | Preferences.
• Escoja la pestaña “Advanced” y presione el botón “View Certificates”.
• Escoja la pestaña “Authorities” y presione el botón “Import”.
• Navegue hasta el archivo de certificado que le pasó su compañero y escójalo.
• Busque ahora en la lista de certificados por “Universidad Icesi” o por el nombre de empresa
que su compañero especificó en el certificado. Qué puede observar?
Vuelva a intentar el acceso al servidor de su compañero en modo seguro (https://x.x.x.x). Qué pasa
ahora? Por qué?
Vuelva a acceder al servidor de su compañero en modo seguro, pero esta vez capture la
conversación empleando Wireshark.