Administracion de Redes

Administracion de Redes
En este blog encontraran todo lo relacionado con el modulo de seguridad de administracion de redes, aunque tambien encontraran documentos relacionados con tecnologia e informatica.

jueves, 8 de mayo de 2008

ENTIDAD CERTIFICADORA EN LINUX/DEBIAN

Creacion de una Entidad certificadora personal con OpenSSL


Gracias a OpenSSL podemos tener comunicacion encriptada entre diferentes maquinas utilizando criptologia asimetrica, es decir, claves publicas y privadas. Ademas, es posible montar entidades certificadoras que se encarguen de asegurar que una llave pertenece a quien dice pertenecer, de esta forma conseguimos encriptacion y autentificacion.


Las entidades certificadoras actuales cobran por el servicio de firma de llaves y no suele ser precisamente asequible. Por otro lado, montar una entidad certificadora oficial tambien resulta muy costoso ya que se demandan unas ciertas garantias que destras del negocio hay una cierta seguridad. Por tanto, es habitual que los administradores de pequeñas redes se creen su propios certificados para firmar sus claves. De esta forma podremos disponer de comunicaciones encriptadas sin necesidad de entidades certificadoras.


Estas entidades oficiales pagan para que aparezcan por defecto sus certificados en navegadores como Mozilla Firefox o Internet Explorer. De esta forma el propio navegador puede comprobar automaticamente que cuando se conecta a un sitio seguro, el certificado que recibe ha sido realmente firmado por una entidad oficial. Eso implica que nuestros certificados no seran reconocidos automaticamente por los navegadores a no ser que los añadamos manualmente, el unico inconveniente que aporta esto es que el navegador mostrara un aviso extra al usuario (dependiendo de la configuracion) advirtiendo que no reconoce la entidad certificadora.


Vamos a ver como configurar OpenSSL para montar nuestro servicio de certificacion personal. Lo primero es tener OpenSSL instalado en el sistema:

#apt-get install openssl


La configuracion la encontraremos en /etc/ssl y sera halla donde editemos el archivo openssl.cnf


Pongo un extracto del archivo con lo mas importante:

...


[ ca ]

default_ca = CA_default


[ CA_default ]

dir = /etc/ssl/certificadora # 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.

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

certificate = $dir/pub.crt # The CA certificate

serial = $dir/serial # The current serial number

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

private_key = $dir/private/priv.key # The private key

default_days = 30

...


En esta seccion del fichero se define donde se va a almacenar toda la informacion, en mi caso lo guardare todo en /etc/ssl/certificadora. Dentro de ese directorio creare toda una serie de subdirectorios que guardaran la informacion necesaria e imprescindible como por ejemplo el certificado o clave de la entidad (tanto privada como publica). Tambien he puesto que por defecto que se generen claves con un periodo de caducidad de 30 dias.


Tendremos que crear la estructura de directorios y ficheros:

#mkdir /etc/ssl/certificadora/

#mkdir /etc/ssl/certificadora/certs

#mkdir /etc/ssl/certificadora/private

#mkdir /etc/ssl/certificadora/newcerts

#mkdir /etc/ssl/certificadora/crl

#echo "01" > /etc/ssl/certificadora/serial

#touch /etc/ssl/certificadora/index.txt


A continuacion crearemos la clave publica/privada de nuestra entidad certificadora:

#cd /etc/ssl/certificadora/

#openssl req -nodes -new -x509 -keyout private/priv.key -out pub.crt -days 30


Es importante especificar el mismo nombre para la clave privada (priv.key) y publica (pub.crt) que pusimos en nuestra configuracion de OpenSSL. En cuanto a las preguntas que nos haga para generar la clave:


Country Name (2 letter code) [ES]:

State or Province Name (full name) [Catalunya]:

Locality Name (eg, city) :Tarragona

Organization Name (eg, company) [Marble Station]:

Organizational Unit Name (eg, section) :Ejemplo

Common Name (eg, YOUR name) :midominio.com

Email Address :admin@midominio.com


Cabe destacar que en Common Name debemos poner el nombre de dominio correspondiente a la maquina donde estara la entidad certificadora.


Ahora ya tenemos nuestro servicio de certificaciones montado, las claves que hemos generado nos serviran para firmar terceras claves que seran utilizadas por ejemplo por los diferentes ordenadores de nuestra red.


Imaginemos que en el mismo servidor donde hemos montado nuestros certificados para firmar, tenemos un servidor web Apache seguro (SSL) y necesitamos un certificado firmado por nuestra entidad personal. Lo primero que tendremos que hacer sera crear una peticion de certificado junto a una clave privada:

#openssl req -nodes -new -keyout midominio.key -out midominio.csr


Nos volvera a realizar las respectivas preguntas, debemos responder acorde para la maquina donde se va a utilizar la clave. En midominio.key tendremos la clave privada generada y en midominio.csr la peticion de certificado. La entidad certificadora solo necesita acceso al segundo, vamos a generar ahora el certificado firmado por nuestra entidad personal:

#openssl ca -out midominio.crt -in midominio.csr


Esto generara el archivo midominio.crt con el certificado firmado listo para ser usado por el solicitante. Ademas se guardara informacion referente al certificado firmado en /etc/ssl/certificadora de forma que siempre tendremos un listado de todo lo que hemos firmado, tambien podremos revocar firmas (man openssl) en caso de que sea necesario.


Habitualmente suelo ubicar los certificados de servicios en /etc/ssl/certs y /etc/ssl/private de la maquina que los vaya a usar:

#mv midominio.crt /etc/ssl/certs

#mv midominio.key /etc/ssl/private


La peticion de certificado midominio.csr no lo vamos a necesitar mas puesto que ya hemos generado el certificado.


Ahora podriamos seguir generando nuevos certificados para despues firmarlos y repartirlos entre las maquinas de nuestra red que dispongan de servicios con conexion segura.


Copiamos el archivo que vamos a certificar, que bebio ser firmado por el servidor web que vamos a certificar, a la ruta /etc/ssl/certificadora:

#cp /tmp/peludo.crs /etc/ssl/certificadora


Luego lo certificamos:

#openssl ca -out andres.crt -in peludo.csr



En resumen, hemos llevado a cabo dos acciones:

1. Generacion de los certificados de nuestra entidad certificadora no oficial (clave publica pub.crt y clave privada priv.key), se guardara toda la informacion en /etc/ssl/certificadora/

2. Generacion de certificados firmados para los servicios o maquinas de nuestra red, se guardara automaticamente la informacion necesaria en /etc/ssl/certificadora/ y la clave publica/certificado firmado se guardaran en la maquina que los vaya a usar (/etc/ssl/certs, /etc/ssl/private respectivamente):

1. Generacion de una clave privada (midominio.key) con peticion de certificado (midominio.csr).

2. Firma de la peticion con nuestro certificado de entidad.

3. El solicitante recibira su certificado firmado (midominio.crt) que usara en conjunto con su clave privada para su servicio (podremos eliminar la peticion midominio.csr).




No hay comentarios: