Actividad 3: Túnel SSL/TLS
Para conseguir la mayor seguridad al realizar una VPN con OpenVPN se debe utilizar criptografía asimétrica (o de clave pública). Estos sistemas se inventaron para evitar el problema del intercambio de claves propio de los sistemas de cifrado simétricos.
Entre los inconvenientes de la criptografía asimétrica se encuentran:
- Es necesario un tamaño mayor de clave para garantizar la seguridad
- El cifrado es más lento que un cifrado simétrico
- El mensaje cifrado ocupa más espacio
Por esto, en algunas aplicaciones se utilizan sistemas de criptografía híbrida en los que se combinan las dos técnicas. Se utiliza cifrado asimétrico para transmitir la clave simétrica a la otra estación, después se utiliza la clave simétrica para cifrar el mensaje (gran volumen de información) a transmitir. Como no es seguro confiar de forma continua en la misma clave simétrica, cada cierto tiempo se renegocian nuevas claves.
Para obtener conexiones seguras en Internet se utiliza el estandard SSL/TLS, que es un sistema de criptografía híbrida, pues se utiliza tanto el cifrado asimétrico como el simétrico.
Infraestructura de clave pública PKI
Para poder utilizar la criptografía de clave pública es necesario disponer de una infraestructura PKI (public key infraestructure).
Algunos de los elementos que forman una PKI son:
- Autoridad de certificación
- Es la entidad que gestiona (emitiendo y revocando) los certificados digitales. La Autoridad de Certificación (AC o CA en inglés) legitima ante terceros que confían en sus certificados la relación entre la identidad de un usuario y su clave pública.
- Certificado digital
- Documento digital mediante el que la AC garantiza la relación entre una persona (o entidad) y su clave pública. Normalmente se utiliza el estandard ITU - X.509 para definir el formato de los certificados digitales.
- Lista de revocación de certificados
- Como su nombre indica, es una lista de certificados que han dejado de ser válidos y ya no se debe confiar en ellos.
Generando una autoridad de certificación propia
Existen autoridades de certificación privadas como Thawte o Verisign y públicas como ANCERT. Pero no hay ningún problema en crear nuestra propia autoridad de certificación, de manera que con su certificado raíz podamos crear todos los certificados necesarios para los túneles en nuestra organización. Para tal fin se puede utilizar OpenSSL o GNU TLS.
Puede encontrar ejemplos sobre como crear la infraestructura PKI con OpenSSL en:
- http://openvpn.net/howto.htm/#pki
- En la sección "Construcción de los certificados y claves RSA" de: http://laurel.datsi.fi.upm.es/~rpons/openvpn_como/
En el primer documento se explica como utilizar los scripts easy-rsa que acompañan a OpenVPN y en el segundo se utilizan directamente las herramientas de OpenSSL para generar la autoridad de certificación y todas las claves.
En cualquier caso se debe obtener:
- Un certificado/clave de Autoridad de Certificación maestra para firmar el resto
- Un certificado/clave para cada máquina
Utilizando easy-rsa
El script easy-rsa está incluido en el paquete OpenVPN y permite utilizar las herramientas de OpenSSL con facilidad.
- Construya el directorio de trabajo: /home/<usuario>/easy-rsa-2.0 y copie en su interior los scripts de easy-rsa. En Mandriva 2007 están en /usr/share/openvpn/easy-rsa/2.0 Dentro del directorio de trabajo se generarán todos los certificados.
- Cambie al directorio de trabajo y edite el fichero vars. Adapte los valores por defecto del certificado a conveniencia.
- Construya una nueva autoridad de certificación
[vcarceler@localhost 2.0]$ . ./vars
NOTE: If you run ./clean-all, I will be doing a rm -rf on /home/vcarceler/easy-rsa-2.0/2.0/keys
[vcarceler@localhost 2.0]$ ./clean-all
[vcarceler@localhost 2.0]$ ./build-ca
Generating a 1024 bit RSA private key
.............++++++
....++++++
writing new private key to 'ca.key'
-----
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) [US]:ES
State or Province Name (full name) [CA]:Cataluña
Locality Name (eg, city) [SanFrancisco]:Santa_Coloma_de_Gramenet
Organization Name (eg, company) [Fort-Funston]:IES_Puig_Castellar
Organizational Unit Name (eg, section) []:xeill
Common Name (eg, your name or your server's hostname) [Fort-Funston CA]:IES Puig Castellar CA
Email Address [me@myhost.mydomain]:
[vcarceler@localhost 2.0]$ - Generar certificado y clave para el equipo A (que actuará como servidor)
./build-key-server clienteA
- Generar ceritificado y clave para el equipo B
./build-key clienteB
- Generar los parámetros Diffie Hellman
./build-dh
Actividades:
- Construya una PKI utilizando el script easy-rsa
- Construya un túnel con TLS-RSA utilizando dicha PKI
- Compruebe que el túnel transporta datos cifrados
- Compare el ancho de banda y uso de CPU con el caso en el que no se utilizaba cifrado
- Construya una nueva PKI utilizando directamente los comandos de OpenSSL