View
7
Download
0
Category
Preview:
Citation preview
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.
1°
2°
3°
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.
1°
2°
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
Recommended