viernes, 11 de febrero de 2011

OpenVPN con certificados

Introducción

Para crear las vpn de cliente, necesitamos tener una entidad certificadora para generar los certificados de cliente y servidor, que en nuestro caso estará en Server1 y el software openvpn instalado en las máquinas. Los certificados para la vpn  estarán en /opt/certificados/keys.
Para las vpn de los clientes generaremos un certificado por cada uno de ellos, debido a que necesitamos poder asignar IPs fijas a cada cliente, y esto se consigue mediante un certificado único por cliente.

Creación de la entidad cerificadora

  1. Para la creación de la entidad certificadora, en el directorio /opt/certificados  de la máquina que hara las veces de CA, copiamos el contenido de /usr/share/doc/openvpn/examples/easy-rsa/ a /opt/certificados.
  2. El siguiente paso es modificar el fichero vars con los datos correspondientes.
         export KEY_COUNTRY=es
         export KEY_PROVINCE=Madrid
         export KEY_CITY=Madrid
         export KEY_ORG="Miempresa"
         export KEY_EMAIL="sistemas@miempresa.com"
  1. Cargamos las variables de entorno, lanzamos la limpieza de certificados y generamos la CA.
         . ./vars
         ./clean-all
         ./build-ca

Generación de certificados y clave para el servidor

  • Para la generación del certificado de servidor hay que lanzar el siguiente comando:
         ./build-key-server server

Generación de certificados de cliente

  • En el caso de las vpn de los clientes tenemos que repetir este proceso por cada cliente, por que como hemos comentado arriba, las servoapp necesitan de una IP fija para su monitorización y el proceso de recuperación de datos del cliente.
          ./build-key cliente1
          root@baco /opt/certificados $ ./build-key cliente1
          Generating a 1024 bit RSA private key
          ......................++++++
          ..........................................................++++++
          writing new private key to 'cliente1.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) [es]:
         State or Province Name (full name) [Madrid]:
         Locality Name (eg, city) [Madrid]:
         Organization Name (eg, company) [Miempresa Cliente]:
         Organizational Unit Name (eg, section) []:sistemas
         Common Name (eg, your name or your server's hostname) []:cliente1
         Email Address [sistemas@miempresa.com]:
         Please enter the following 'extra' attributes
         to be sent with your certificate request
         A challenge password []:
         An optional company name []:
         Using configuration from /opt/certificados/openssl.cnf
         Check that the request matches the signature
         Signature ok
         The Subject's Distinguished Name is as follows
         countryName           :PRINTABLE:'es'
         stateOrProvinceName   :PRINTABLE:'Madrid'
         localityName          :PRINTABLE:'Madrid'
         organizationName      :PRINTABLE:'Miempresa Cliente'
         organizationalUnitName:PRINTABLE:'sistemas'
         **commonName            :PRINTABLE:'cliente1'**
         emailAddress          :IA5STRING:'sistemas@miempresa.com'
         Certificate is to be certified until Dec  6 11:27:35 2017 GMT (3650 days)
         Sign the certificate? [y/n]:y
         1 out of 1 certificate requests certified, commit? [y/n]y
         Write out database with 1 new entries
         Data Base Updated
  • Es muy importante a la hora de generar el certificado de cliente el campo commonName ya que deberemos crear un fichero con ese mismo nombre dentro de /etc/openvpn/ccd para que openvpn asigne una IP fija a ese cliente.

Generación Diffie Hellman

         ./build-dh

Fichero de configuración

Un vez generados los certificados y la CA (/opt/certificados/keys), debemos copiar al directorio /etc/openvpn/ del servidor, los siguientes ficheros:
  • ca.crt
  • server.crt
  • server.key
  • dh1024.pem
Ahora vamos a pasar el fichero de configuración server.conf:
         port 1194
         proto tcp
         dev tun
         ca server/ca.crt
         cert server/server.crt
         key server/server.key  
         dh server/dh1024.pem
         server 10.0.0.0 255.255.255.0
         ifconfig-pool-persist ipp.txt
         client-config-dir ccd
         keepalive 10 120
         comp-lzo
         user nobody
         group nogroup
         persist-key
         persist-tun
         status openvpn-status.log
         verb 3
  • En la directiva “client-config-dir ccd” espeficicamos a openvpn que lea cualquier fichero contenido en este directorio que coincida con el commonName del certificado de cliente. Por ejemplo, hemos creado un fichero llamado cliente1 que contiene la linea:
         ifconfig-push 10.0.0.250 10.0.0.1
De esta manera le decimos a openvpn que reserve esta IP para el certificado de cliente cliente1, siendo 10.0.0.250 la IP asignada al cliente y 10.0.0.1 la IP que tiene el servidor.
Para la configuración de la vpn del lado del cliente , necesitaremos enviar los ficheros:
  • ca.crt
  • cliente1.crt
  • cliente1.key
Así mismo el fichero de configuración del lado del cliente tendrá el siguiente contenido
         client
         dev tun
         proto tcp
         remote 80.25.33.194 1194
         resolv-retry infinite
         nobind
         persist-key
         persist-tun
         ca servotic_cliente/ca.crt
         cert servotic_cliente/cliente1.crt
         key servotic_cliente/cliente1.key
         comp-lzo
         verb 3

No hay comentarios:

Publicar un comentario