Está en la página 1de 7

UNIVERSIDAD ICESI

FACULTAD DE INGENIERÍA
ASEGURAMIENTO DE PLATAFORMAS
SERVICIO WEB SEGURO (HTTP SOBRE SSL)

Los objetivos de esta práctica de laboratorio son:


• Crear una autoridad de certificación bajo un servidor Linux Ubuntu.
• Crear una solicitud de generación de certificado de seguridad para un servidor web.
• Firmar la solicitud de certificado empleando la autoridad de certificación, para producir el
certificado de servidor.
• Configurar el servidor web Apache para operación segura, empleando el certificado de
servidor generado anteriormente.
• Instalar un certificado de autoridad de certificación en un navegador web.
• Analizar y comprender el intercambio inicial de paquetes de una sesión HTTPS.
• Comprobar la protección que ofrece el servicio HTTPS, capturando una conversación
efectuada empleando este protocolo.

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.

CREACIÓN DE UNA AUTORIDAD DE CERTIFICACIÓN

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.

Para crear la autoridad de certificación, realice el siguiente procedimiento:

• 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:

Aseguramiento de Plataformas – Taller #3


Página 1 de 7
cd /root
mkdir certs
chmod 700 certs
cd certs

El primer paso en la creación de la CA es generar su par maestro de claves. La clave privada de la


CA sirve para firmar todos los certificados que ella expida, y la clave pública sirve para verificar la
validez de un certificado. Para crear el par de claves, emplee el comando:
openssl genrsa -des3 -out ca.key 4096, que generará una clave RSA de 4096 bits y la
grabará en el directorio actual, en el archivo ca.key. El sistema desplegará lo siguiente:

Generating RSA private key, 4096 bit long modulus


......................................................................++
.++
e is 65537 (0x10001)
Enter pass phrase for ca.key: *****
Verifying - Enter pass phrase for ca.key: *****

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:

Enter pass phrase for ca.key:

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:

You are about to be asked to enter information that will be incorporated


into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:

Introduzca CO, por Colombia.

State or Province Name (full name) [Some-State]:

Puede introducir “Valle del Cauca”.

Locality Name (eg, city) []:

A esta pregunta puede contestar “Cali”.

Organization Name (eg, company) [Internet Widgits Pty Ltd]:

Puede responder “Universidad Icesi”, o el nombre de su compañía.

Organizational Unit Name (eg, section) []:Curso Seguridad Informacion

Aquí va el departamento de la empresa que expide el certificado. Puede responder, por ejemplo,
“Seguridad Informática”.

Aseguramiento de Plataformas – Taller #3


Página 2 de 7
Common Name (eg, YOUR name) []:

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.

Email Address []:

Puede escribir su dirección de email, o dejar el campo en blanco.

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:

openssl rsa –noout –text –in ca.key

Y puede revisar el contenido del certificado con:

openssl x509 –noout –text –in ca.crt

CREACIÓN DEL CERTIFICADO DEL SERVIDOR

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:

# openssl genrsa -des3 -out server.key 4096


Generating RSA private key, 4096 bit long modulus
..............................++
.................................................................................
.................................................................++
e is 65537 (0x10001)
Enter pass phrase for server.key: *****
Verifying - Enter pass phrase for server.key: *****

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.

Cree el archivo de la solicitud de la siguiente manera:

# openssl req -new -key server.key -out server.csr


Enter pass phrase for server.key: *****
You are about to be asked to enter information that will be incorporated
into your certificate request.

Aseguramiento de Plataformas – Taller #3


Página 3 de 7
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:CO
State or Province Name (full name) [Some-State]:Valle del Cauca
Locality Name (eg, city) []:Cali
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Universidad Icesi
Organizational Unit Name (eg, section) []:Seguridad Informatica
Common Name (eg, YOUR name) []:x.x.x.x <- Aquí va la dirección IP de su servidor!
Email Address []:

Please enter the following 'extra' attributes


to be sent with your certificate request
A challenge password []:
An optional company name []:

La solicitud quedará grabada en el archivo server.csr. Puede inspeccionar su contenido


mediante el comando:

openssl req –noout –text –in server.csr

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.

GENERACIÓN DE UNA VERSIÓN INSEGURA DE LA CLAVE PRIVADA DEL SERVIDOR

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:

# openssl rsa -in server.key -out server.key.insecure


Enter pass phrase for server.key: *****
writing RSA key
# mv server.key server.key.secure
# mv server.key.insecure server.key

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.

Aseguramiento de Plataformas – Taller #3


Página 4 de 7
Quedarán entonces los siguientes archivos en el directorio de trabajo:

-rw-r--r-- 1 root root 2500 2010-07-23 10:34 ca.crt


-rw-r--r-- 1 root root 3311 2010-07-23 10:31 ca.key
-rw-r--r-- 1 root root 2041 2010-07-23 11:00 server.crt
-rw-r--r-- 1 root root 1748 2010-07-23 10:57 server.csr
-rw-r--r-- 1 root root 3243 2010-07-23 11:09 server.key
-rw-r--r-- 1 root root 3311 2010-07-23 10:54 server.key.secure

Digite el comando exit para salir del shell privilegiado.

INSTALACIÓN Y CONFIGURACIÓN DE APACHE COMO UN SERVIDOR WEB SEGURO

A continuación se instalará el servidor web Apache. Digite el siguiente comando:

sudo apt-get install apache2-mpm-prefork

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!

Habilite ahora SSL en el servidor, ejecutando el comando:

a2enmod ssl

Luego, active el archivo de configuración de Apache que maneja HTTPS:

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

En el directorio /var/www/html, cree un archivo index.html con el siguiente contenido:

Aseguramiento de Plataformas – Taller #3


Página 5 de 7
<html>
<head>
<title>Servidor inseguro de [su nombre]</title>
</head>
<body>
Esta es una p&aacute;gina en el espacio inseguro del servidor de [su nombre].
Una captura con Wireshark de esta conexi&oacute;n revelar&aacute; todo
el contenido de la p&aacute;gina y los encabezados que a&ntilde;ade el servidor.
</body>
</html>

En el directorio /var/www-ssl/html, cree un archivo index.html con el siguiente contenido:

<html>
<head>
<title>Servidor seguro de [su nombre]</title>
</head>
<body>
Esta es una p&aacute;gina en el espacio seguro del servidor de [su nombre].
Puede ensayar a hacer una captura con Wireshark de esta conexi&oacute;n...
lo m&aacute;s seguro es que no pueda ver nada de esto! :)
</body>
</html>

Regrese al directorio /etc/apache2/sites-available. Modifique los siguientes parámetros del archivo


default (en negrillas). Reemplace x.x.x.x por la dirección IP fija de su servidor Ubuntu:

<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

Aseguramiento de Plataformas – Taller #3


Página 6 de 7
SSLCertificateFile /etc/apache2/ssl/server.crt
SSLCertificateKeyFile /etc/apache2/ssl/server.key

Explique para qué sirven los cambios que acaba de hacer.

Finalmente, reinicie el servidor para que todos los cambios surtan efecto:

service apache2 restart

Digite el comando exit para salir del shell privilegiado.

PRUEBA DEL SERVICIO WEB SEGURO

Inicie una captura en Wireshark. Empleando Firefox, acceda al servidor de un compañero,


empleando la dirección IP (http://x.x.x.x).

Revise los paquetes capturados. Qué puede ver en el contenido?

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.

• Qué observa en la captura?


• Puede ver el contenido de la página en texto claro?
• Interprete la negociación que se ve al inicio de la conexión.

Aseguramiento de Plataformas – Taller #3


Página 7 de 7

También podría gustarte