REDES PRIVADAS VIRTUALES Capítulo 08

17
REDES PRIVADAS VIRTUALES · Capítulo 08 blog.carreralinux.com.ar 1

Transcript of REDES PRIVADAS VIRTUALES Capítulo 08

REDES PRIVADAS VIRTUALES · Capítulo 08

blog.carreralinux.com.ar 1

REDES PRIVADAS VIRTUALES · Capítulo 08

blog.carreralinux.com.ar 2

Capítulo 08 - CREACIÓN DE UNA AC INTERNA

ÍNDICE

Respecto de la autoridad de certificación 3¿Cómo pido un certificado? 4¿Y para qué puedo querer yo una Autoridad de Certificación

Interna? 6Generando una autoridad de certificación y generando

manualmente los certificados oara OpenVPN 8Creando el certificado y keys para el server OpenVPN 11Instalando servidores OpenVPN 13Creando el certificado y keys para el cliente 15Terminando de instalar en el cliente – Windows 17

Suscribite a nuestro Twitter:twitter.com/CarreraLinuxAr

Suscribite a nuestro Facebook:www.facebook.com/carreralinuxar

Suscribite a nuestro Blog:blog.carreralinux.com.ar

REDES PRIVADAS VIRTUALES · Capítulo 08

blog.carreralinux.com.ar 3

Capítulo 08 - CREACIÓN DE UNA AC INTERNA

Respecto de la autoridad de certificación

Lo que hace la autoridad de certificación es

verificar la identidad del solicitante del

certificado antes de que el mismo se expida.

Para esto, recoge ciertos datos del solicitante y su clave pública. Con esto, la autori-

dad de certificación los firma utilizando su clave privada.

Suscribite a nuestro Facebook:www.facebook.com/carreralinuxar

REDES PRIVADAS VIRTUALES · Capítulo 08

blog.carreralinux.com.ar 4

Por lo que la autoridad de certificación es un tipo de prestador en el cual se confía y

legitima la relación entre el usuario y su clave publica.

Es importante entender que no hay un proceso

normalizado para que una autoridad de certi-

ficación sea digna de confianza. Pero el mismo

prestigio de los nombres es elemento necesa-

rio. A mayor prestigio, mayor confianza. Los

ejemplos son Verisign y Certisur.

¿Cómo pido un certificado?

Un tipo de procedimiento consiste en que la entidad solicitante, utilizan-

do la página web de la autoridad de certificación, completa ciertos datos

identificativos y genera una pareja de claves pública/privada.

Con esa información el software de servidor compone un fichero que con-

tiene una petición que se llama CSR (Certificate Signing Request) que

contiene la clave pública y que se hace llegar a la CA elegida.

Ésta, tras verificar por sí o mediante los servicios de una RA (Registration

Authority, Autoridad de Registro) la información de identificación aporta-

da y la realización del pago, envía el certificado firmado al solicitante, que

lo instala en el servidor web con la misma herramienta con la que generó

la petición CSR.

A veces nosotros solo completamos la soli-

citud y subimos la clave pública. De esta

manera ni siquiera la autoridad de certifi-

cación entra en contacto con nuestra clave

privada.

REDES PRIVADAS VIRTUALES · Capítulo 08

blog.carreralinux.com.ar 5

Las CA disponen de sus propios certificados públicos. Estos certificados públicos

muchas veces son auto-instalados en los browsers y por eso es que en algunas pá-

ginas seguras nos pide de importar el certificado y en otras no.

Las claves privadas de los mismos son empleadas por las CA para firmar los

certificados que emiten. Un certificado de CA puede estar auto-firmado cuando

no hay ninguna CA de rango superior que lo firme. O sea, como que yo certifico que

soy yo. Este es el caso de los certificados de CA raíz, el elemento inicial de cualquier

jerarquía de certificación.

Una jerarquía de certificación consiste en

una estructura jerárquica de CAs en la que

se parte de una CA auto-firmada, y en cada

nivel, existe una o más CAs que pueden firmar

certificados de entidad final (titular de cer-

tificado: servidor web, persona, aplicación

de software), o bien certificados de otras CA

subordinadas plenamente identificadas y cuya

Política de Certificación sea compatible con

las CAs de rango superior.

Suscribite a nuestro Twitter:twitter.com/CarreraLinuxAr

Suscribite a nuestro Facebook:www.facebook.com/carreralinuxar

Suscribite a nuestro Blog:blog.carreralinux.com.ar

REDES PRIVADAS VIRTUALES · Capítulo 08

blog.carreralinux.com.ar 6

¿Y para qué puedo querer yo una Autoridad de Certificación Interna?

Bien. Después de haber visto que es una autoridad de certificación y como está jerár-

quicamente estructurada surge la pregunta, ¿para qué me sirve tener una autoridad

de certificación interna?

Nos sirve para certificar todo dentro de, por ejemplo, nuestra red. Anteriormente ha-

bíamos mencionado que no hay un proceso para certificación estandarizado, y que la

misma depende de la confianza en que se tenga para con la autoridad de certificación.

Obviamente, existen estándares que generan mayor o menor con-

fianza (FIPS por ejemplo) para quienes no nos conozcan.

Pero en nuestro caso, ¿por qué no confiar en un equipo que se encuentra dentro de

nuestra red?

Entonces, suponiendo que administramos una cantidad más que importante de sitios

seguros, o tenemos configurado dentro de nuestra red VPN over LAN con PKI. Esto

implicaría generar una cantidad más que importante de certificados. Uno por cada

sitio o usuario.

Bien, ¿entonces por qué no usar una autoridad de certificación interna para esto,

ya que es un equipo en el cual tenemos confianza? Aquí es donde entra en juego

la creación de una autoridad de certificación interna, la cual va a armar y firmar los

certificados.

Suscribite a nuestro Twitter:twitter.com/CarreraLinuxAr

Suscribite a nuestro Facebook:www.facebook.com/carreralinuxar

REDES PRIVADAS VIRTUALES · Capítulo 08

blog.carreralinux.com.ar 7

Luego de esto también podría haber otra pregunta. ¿Por qué no usar nuestra auto-

ridad de certificación para todos los certificados? ¿Inclusive los que pondríamos en

una página que esté disponible para todo el mundo? Otra vez, esta relación está

basada en la confianza, por lo que hay dos motivos:

El primero es que una entidad externa no confía en un equipo de nuestra

empresa que dice “esta persona es quien dice ser, y esta clave pública es

de dicha persona”.

Y segundo; no menos importante y donde se encuentra el negocio, las

CA ya se encuentran preinstaladas en los navegadores para que cuan-

do alguien ingrese a un sitio seguro, no le aparezca la pantalla que estoy

mostrando. Entonces si yo soy una autoridad de certificación, que estoy

preinstalada en varios navegadores, los clientes van a pagarme para que

sea yo quien firme sus claves públicas y no aparezca este cartel que ge-

nera desconfianza.

Suscribite a nuestro Twitter:twitter.com/CarreraLinuxAr

Suscribite a nuestro Facebook:www.facebook.com/carreralinuxar

REDES PRIVADAS VIRTUALES · Capítulo 08

blog.carreralinux.com.ar 8

Generando una autoridad de certificación y generando manual-mente los certificados oara OpenVPN

Vamos a tomar OpenVPN como ejemplo de creación de una CA.

Con esto nos referimos a que este método de creación de una CA

no es propio de OpenVPN; pero vamos a utilizar OpenVPN para

mostrar como ejemplo.

Pero de cualquier manera, estos certificados son formato X.509 lo que nos permitirá

que estos certificados sean utilizados para cualquier aplicación que implemente este

formato.

Como primer paso vamos a instalar OpenSSL. Esto nos va a servir para crear

los certificados, keys, etc. Primero vamos a crear un certificado autofirmado y

clave:

apt-get install openssl

Modificamos el archivo de configuración para que OpenSSL use por defecto

los certificados que vamos a crear. Estos son los parametros por default y va-

riables que va a tomar el OpenSSL. Modificamos las siguientes líneas:

vi /etc/ssl/openssl.cnf

01

02

Suscribite a nuestro Twitter:twitter.com/CarreraLinuxAr

Suscribite a nuestro Facebook:www.facebook.com/carreralinuxar

Suscribite a nuestro Blog:blog.carreralinux.com.ar

REDES PRIVADAS VIRTUALES · Capítulo 08

blog.carreralinux.com.ar 9

Y modificamos las siguientes secciones que encontrarán resaltado en amarillo.

[ CA_default ]

dir = /etc/ssl # Where everything is kept

certs = $dir/certs # Where the issued certs are kept

crl_dir = $dir/crl # Where the issued crl are kept

database = $dir/index.txt # database index file.

#unique_subject = no # Set to ‘no’ to allow creation of

# several ctificates with same subject.

new_certs_dir = $dir/newcerts # default place for new certs.

certificate = $dir/certs/mylinux-ca.crt # The CA certificate

serial = $dir/serial # The current serial number

crlnumber = $dir/crlnumber # the current crl number

crl = $dir/crl.pem # The current CRL

private_key = $dir/private/mylinux-ca.key # The private key

…....

[ policy_match ]

countryName = optional

stateOrProvinceName = optional

organizationName = optional

organizationalUnitName = optional

commonName = supplied

emailAddress = optional

03

Suscribite a nuestro Twitter:twitter.com/CarreraLinuxAr

Suscribite a nuestro Facebook:www.facebook.com/carreralinuxar

REDES PRIVADAS VIRTUALES · Capítulo 08

blog.carreralinux.com.ar 10

[ req_distinguished_name ]

countryName = Country Name (2 letter code)

countryName_default = AR

countryName_min = 2

countryName_max = 2

stateOrProvinceName = State or Province Name (full name)

stateOrProvinceName_default = Buenos Aires

localityName = Locality Name (eg, city)

0.organizationName = Organization Name (eg, company)

0.organizationName_default = My Linux

Ahora vamos a hacer un link para que use este archivo que acabamos de mo-

dificar:

rm /usr/lib/ssl/openssl.cnf

ln -s /etc/ssl/openssl.cnf /usr/lib/ssl/openssl.cnf

Luego, vamos a crear un archivo que contenga un valor de 6 dígitos. Ese ar-

chivo lo que tener el serial number de cada uno de los certificados que vamos

a crear:

mkdir /etc/ssl/newcerts

touch /etc/ssl/index.txt

echo ‘100001’ > /etc/ssl/serial

Suscribite a nuestro Twitter:twitter.com/CarreraLinuxAr

Suscribite a nuestro Blog:blog.carreralinux.com.ar

04

05

REDES PRIVADAS VIRTUALES · Capítulo 08

blog.carreralinux.com.ar 11

Ahora sí, vamos a crear nuestros certificados y claves. Esto es el certificado y

clave correspondiente a la autoridad de certificación, no al servidor VPN.

Es muy importante diferenciar esto. Por un lado vamos a tener la clave privada

y el certificado que utiliza para firmar las claves que van a ser tanto del servidor

como de los clientes:

openssl req -days 3650 -nodes -new -x509 -keyout /etc/ssl/priva-

te/mylinux-ca.key -out /etc/ssl/certs/mylinux-ca.crt

Creando el certificado y keys para el server OpenVPN

Como mencionamos anteriormente, ahora vamos a crear las keys para el servidor

OpenVPN. Para esto tenemos que crear un archivo del tipo .csr.

Esto se le enviará a la autoridad de certificación para que la

autoridad devuelva el certificado correspondiente. Por lo tan-

to, este procedimiento se puede hacer tanto dentro de la misma

autoridad de certificación como dentro del servidor OpenVPN.

Para este ejemplo nosotros vamos a utilizar la autoridad de certificación que también

va a funcionar como servidor OpenVPN; pero hay que tener en cuenta de nuevo que

una cosa son los certificados y claves privadas de la autoridad de certificación y otra

cosa son los certificados y claves del OpenVPN.

Como vieron, la autoridad de certificación está en la raíz de

la jerarquía y por eso generamos un certificado auto-firmado.

Pero ahora lo que vamos a hacer es empezar a firmar los certificados de los clientes

y servidores.

Suscribite a nuestro Facebook:www.facebook.com/carreralinuxar

06

REDES PRIVADAS VIRTUALES · Capítulo 08

blog.carreralinux.com.ar 12

En este mismo movimiento vamos a crear la llave privada y la solicitud de firma

del certificado:

openssl req -days 365 -nodes -new -keyout /etc/ssl/private/

mylinux-ovpn-server.key -out /etc/ssl/newcerts/mylinux-ovpn-

server.csr

Ahora, nosotros enviaremos el .csr a la autoridad de certificación quien verifi-

cará que fehacientemente provenga de nosotros. O sea, en una estructura un

poco más grande puede ser que el servidor OpenVPN este administrado por

otra persona que quien administra la autoridad de certificación.

Entonces sería una buena práctica que el encargado de la CA

verifique de alguna manera que esa solicitud venga de quien va

a dar acceso a la red interna para cualquier persona o sede.

Una vez que recibimos, como autoridad de certificación el request, vamos a

crear el certificado y firmarlo en un solo movimiento. Por lo que vemos, lo único

que enviaríamos a la CA seria el request de certificación:

openssl ca -days 365 -out /etc/ssl/newcerts/mylinux-ovpn-server.

crt -in /etc/ssl/newcerts/mylinux-ovpn-server.csr

Ahora verifiquemos que esta todo correcto:

openssl x509 -text -in /etc/ssl/newcerts/mylinux-ovpn-server.crt

| head -n 14

Si llegáramos a tener la CA separado de lo que es el server VPN debemos en-

viarle los siguientes archivos:

-rw-r--r-- 1 root root 1188 Apr 5 22:23 mylinux-ca.crt

-rw-r--r-- 1 root root 3147 Apr 5 22:07 mylinux-ovpn-server.crt

-rw-r--r-- 1 root root 887 Apr 5 22:08 mylinux-ovpn-server.key

Suscribite a nuestro Twitter:twitter.com/CarreraLinuxAr

01

02

03

04

05

REDES PRIVADAS VIRTUALES · Capítulo 08

blog.carreralinux.com.ar 13

Instalando servidores OpenVPN

Ahora vamos a instalar OpenVPN:

cd /tmp

wget http://swupdate.openvpn.org/community/releases/open-

vpn-2.3.1.tar.gz

apt-get install libssl-dev liblzo2-dev libpam0g-dev gcc make

tar -zxvf openvpn-2.3.1.tar.gz

cd openvpn-2.3.1

./configure

make install

Ahora vamos a crear las carpetas para alojar los certificados dentro del server:

mkdir -p /etc/openvpn/server

mkdir -p /etc/openvpn/clients

Aparte de eso, vamos a copiar el template del archivo de configuración del

servidor OpenVPN junto con su clave privada, certificado y el certificado de la

autoridad de certificación.

cp sample/sample-config-files/server.conf /etc/openvpn/server/

cp /etc/ssl/private/mylinux-ovpn-server.key /etc/openvpn/server/

cp /etc/ssl/newcerts/mylinux-ovpn-server.crt /etc/openvpn/server/

cp /etc/ssl/certs/mylinux-ca.crt /etc/openvpn/server/

Vamos a crear los parámetros de Diffie-Hellman:

openssl dhparam -out /etc/openvpn/server/dh-2048.pem 2048

01

02

03

04

Suscribite a nuestro Twitter:twitter.com/CarreraLinuxAr

Suscribite a nuestro Facebook:www.facebook.com/carreralinuxar

REDES PRIVADAS VIRTUALES · Capítulo 08

blog.carreralinux.com.ar 14

Luego, creamos los parámetros de configuración del server:

vi /etc/openvpn/server/server.conf

local <ip-del-server-openvpn>

proto udp

ca /etc/openvpn/server/mylinux-ca.crt

cert /etc/openvpn/server/mylinux-ovpn-server.crt

key /etc/openvpn/server/mylinux -ovpn-server.key

dh /etc/openvpn/server/dh-2048.pem

server 10.8.0.0 255.255.255.0

push “route 10.0.0.0 255.255.255.0”

log-append /var/log/openvpn.log

verb 4

push “dhcp-option DNS 8.8.8.8”

Donde:

· local: la dirección IP y puerto en la que va a escuchar

· proto: protocolo

· ca, cert, key y dh: archivos de certs, keys y parámetros.

· Server: direcciones IP que le van a asignar a los clientes

· push route: las rutas que le vamos a enviar a los clientes. O sea, las subredes que

van a estar a través de la VPN

· log append, verb: lugar donde están los logs y la verbosidad

· push dhcp-options: en este caso, junto con la ruta van los DNS. Hay que aclarar que

va a usar estos DNS para resolver, y no los que tenía antes

Finalmente, iniciamos el OpenVPN:

nohup openvpn --config /etc/openvpn/server/server.conf --port 1194 \

--daemon openvpn &

nohup: ignoring input and appending output to `nohup.out’ [1]+ Don

Verificamos que este escuchando en el puerto 1194:

netstat -nap | grep 1194 | grep openvpn

udp 0 0 172.16.2.108:1194 0.0.0.0:* 14524/openvpn

05

06

07

REDES PRIVADAS VIRTUALES · Capítulo 08

blog.carreralinux.com.ar 15

Creando el certificado y keys para el cliente

Ya tenemos el server corriendo por lo que hay que empezar a trabajar con el cliente.

Hay distintas maneras de crear el certificado, podemos crear

la solicitud en el OpenVPN server, en el cliente o en la CA.

Lo importante es que la CA reciba el .csr.

Lo que vamos a hacer es crear en el servidor OpenVPN la solicitud junto con la

clave privada y pública que después le enviaremos al cliente y la carpeta en el

servidor que también guardaremos las credenciales del cliente. Nuestro usua-

rio en este caso será Pepe Grillo:

mkdir -p /etc/openvpn/clients/pgrillo

openssl req -days 365 -nodes -new -keyout /tmp/pgrillo.key -out

/tmp/pgrillo.csr

Ahora creamos el certificado:

openssl ca -days 365 -out /etc/openvpn/clients/pgrillo/pgrillo.

crt -in /tmp/pgrillo.csr

Finalmente armamos el pack que le vamos a enviar al cliente. Su clave privada,

su certificado:

mkdir /tmp/pgrillo_ovpn

mv /tmp/pgrillo.key /tmp/pgrillo_ovpn/

cp /etc/openvpn/clients/pgrillo/pgrillo.crt /tmp/pgrillo_ovpn/

El certificado con la clave publica del servidor:

cp /etc/ssl/certs/mylinux-ca.crt /tmp/pgrillo_ovpn/

Suscribite a nuestro Facebook:www.facebook.com/carreralinuxar

01

02

03

04

REDES PRIVADAS VIRTUALES · Capítulo 08

blog.carreralinux.com.ar 16

Y el archivo de configuración del cliente OpenVPN:

vi /tmp/pgrillo_ovpn/pgrillo.ovpn

client

dev tun

proto udp

remote 172.16.2.108 1194

resolv-retry infinite

nobind

persist-key

persist-tun

key pgrillo.key

cert pgrillo.crt

ca mylinux-ca.crt

comp-lzo

verb 3

log /var/log/ovpn.log

Y armamos el paquete:

cd /tmp

tar -zcvf pgrillo.tar.gz pgrillo_ovpn

Por último, recuerden que es importante que el server tenga habi-

litado el forwardin de IP. Por lo que al final del archivo /etc/

sysctl.conf pondremos:

net.ipv4.ip_forward=1

Y ejecutaremos el siguiente comando:

# net.ipv4.ip_forward=1

Suscribite a nuestro Twitter:twitter.com/CarreraLinuxAr

05

06

07

REDES PRIVADAS VIRTUALES · Capítulo 08

blog.carreralinux.com.ar 17

Terminando de instalar en el cliente - Windows

Lo primero que debemos hacer es obtener el archivo .tar.gz del server. Este puede

ser enviado de manera segura. Nosotros vamos a transmitirlo vía winscp. Luego de-

bemos descargar OpenVPN client para Windows de la siguiente URL:

https://swupdate.openvpn.org/community/releases/openvpn-insta-

ll-2.4.0-I601.exe

OpenVPN client al momento de instalar en Windows crea una car-

peta en C:\Archivos de Programa\openvpn\config. Si llegamos a

tener más de una VPN se deberá colocar el archivo .ovpn aquí

dentro. Automáticamente cada archivo .ovpn que coloquemos aquí

dentro, después nos figurará como opción para crear una VPN.

Descargaremos utilizando el winscp desde el servidor. Después de eso desempaque-

taremos dentro de C:\Archivos de Programa\openvpn\config

Ahora si, abrimos la aplicación de OpenVPN como administrador ya que necesita

realizar operaciones de administrador. Abajo a la derecha, en el systray, notaremos

un nuevo ícono. Si le hacemos click con el botón derecho, figurará el archivo de con-

figuración que copiamos anteriormente.

Suscribite a nuestro Twitter:twitter.com/CarreraLinuxAr

Suscribite a nuestro Facebook:www.facebook.com/carreralinuxar

Suscribite a nuestro Blog:blog.carreralinux.com.ar