jump to navigation

Cómo crear certificados digitales (ser un CA) 2 diciembre, 2009

Posted by ubanov in Informática-Linux, seguridad.
Tags: , , ,
trackback

Cuando en las comunicaciones de un servidor web queremos seguridad, lo que se hace es encriptar las comunicaciones. Para ello se usa el protocolo HTTPS. Esto es sólo un ejemplo pero se utiliza en otros protocolos también…

De forma resumida la forma de funcionar el HTTPS es mediante certificados. En esta entrada voy a describir un poco todo el tema de certificados y dar los pasos para crear todos lo certificados necesarios, tanto para ser un Certificate Authority, como para un servidor Web.

En concreto un servidor con HTTPSr crea dos certificados: una clave privada y una clave pública. La clave privada es algo que sólo tiene el servidor y la clave pública es la información que envía a los clientes. Con este par de claves puedes asegurar que estás hablando con un determinado servidor. (con la clave privada un servidor encripta un paquete de datos, y el cliente con la clave pública es capaz de desencriptarlo).

El caso es que cualquiera puede crearse un par de llave pública/privada que se correspondan o digan que se corresponden con cualquier dominio. Para evitar esto, lo que hay es un tercer certificado. Lo que surgen son las entidades que se encargan de asegurar que los certificados son correctos. A estas entidades se les llama “Certificate Authorities” (CA). Estos certifican que si yo me he creado un certificado para el dominio “store.apple.com”, por poner un ejemplo, tengo derecho a usarlo. Una entidad certificadora podría ser Verisign.

La forma de certificar que un certificado es correcto es que ellos comprueban de alguna forma que tu eres quien dices que eres (Verisign por ejemplo te pide cierta información de la empresa, luego busca teléfonos de la misma que aparezcan en los listines públicos y te intenta localizar así… vamos que no vale decir yo soy Bill Gates, para comprobarlo llámame a mi móvil y les doy el número). Una vez que ha comprobado que puedes tener un certificado lo que hace es firmar con su clave …. Por todo este proceso las Certificate Authorities suelen cobrar dinero (aunque hay alguna gratuita). Para los CA nuevamente existen dos pares de claves, la privada que tiene el CA en su instalación, y una pública del CA que está instalado en los ordenadores.

De esta forma el cliente recibirá una clave pública diciendo que es el dominio que sea, esta llave estará firmada por un CA. Si el ordenador tiene dado de alta a ese CA, comprobará que todo sea ok (vamos que la clave deberá estar firmada por un CA conocido por el cliente).

En ciertas ocasiones es habitual que una empresa pueda tener su propia entidad certificadora (para poder crear los certificados que quiera sin tener que pagar por ellos). Esto obliga a que en los PCs que van a conectarse contra algo firmado por esta CA, se tenga que tener configurar el certificado del CA en todos los ordenadores (para que no de un aviso diciendo que los certificados no son correctos). El proceso al final no es complicado, con lo que puede ser incluso que lo hagas para tu casa (yo en mi casa lo tengo hecho).

En la siguiente entrada doy 4 notas sobre lo que hay que hacer para ser un CA y para firmar un certificado para Web. Con el mismo método se podrían firmar otros certificados (Radius, correo…).

Toda la gestión de certificados se hace utilizando el paquete “openssl”. Dentro de este paquete lleva varios comandos para hacerte la vida más sencillos, entre ellos lleva un script para crear los ficheros de un CA.

Vete al directorio /usr/lib/ssl/misc y edita el script CA.pl-newca para parametrizarlo para tus gustos (por ejemplo, hacer que los certificados duren 10 años, para no tener que estar retocándolo cada 2-3 años…). Una vez hecho esto ejecutar lo siguiente:

cd /usr/lib/ssl/misc
./CA.pl -newca

Rellenar los datos de ubicación, nombre de CA…. y esto acabará creándonos los ficheros de la entidad certificadora. Estos ficheros deberíamos guardarlos celósamente.

# cat demoCA/private/cakey.pem

Ha sido fácil hacerse CA, no?!? (ya había avisado que no era complicado)

Ahora vamos a crear un certificado para un apache (no le pongáis clave o cada vez que arranques el apache te la pedirá):

./CA.pl -newreq
# cat newreq.pem
# openssl req -text -noout <newreq.pem

Y por último firmarlo con el certificado del CA
./CA.pl -sign

Ahora vamos a instalarlo en el apache.

Lo primero que vamos a hacer es crear un directorio donde almacenar los certificados:

mkdir /etc/apache2/ssl

Ahora vamos a habilitar el SSL en el apache:

cd /etc/apache2/mods-enabled
ln -s ../mods-available/ssl.load ssl.load
ln -s ../mods-available/ssl.conf ssl.conf

Copiamos los certificados que hemos creado antes:

cp /usr/lib/ssl/misc/new* /etc/apache2/ssl/
cp /usr/lib/ssl/misc/demoCA/cacert.pem /etc/apache2/ssl/

Copiamos el sitio que tenemos por defecto, para crear el site de SSL:

cp /etc/apache2/sites-available/000-default /etc/apache2/sites-available/001-ssl

Cambiar al principio las siguientes líneas:

<VirtualHost *:443>
ServerAdmin webmaster@localhost

SSLEngine On
SSLCertificateFile /etc/apache2/ssl/newcert.pem
SSLCertificateKeyFile /etc/apache2/ssl/newkey.pem
SSLCACertificateFile /etc/apache2/ssl/cacert.pem
SetEnvIf User-Agent “.*MSIE.*” nokeepalive ssl-unclean-shutdown

[…]

ErrorLog /var/log/apache2/error-ssl.log

# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn

CustomLog /var/log/apache2/access-ssl.log combined
[…]

Lo que hemos hecho es habilitar el SSL y cambiar dónde se quedan los logs (en debian/ubuntu por defecto se hace el autorotado de los mismos).

Por último habilitamos el sitio con el siguiente comando:

cd /etc/apache2/sites-enabled/
ln -s ../sites-available/001-ssl 001-ssl

Reiniciando el servidor apache ya podríamos acceder al servidor por SSL, pero nos dará un aviso en el navegador, diciendo que está firmado por un CA que no lo conocemos. Para evitar esto vamos a hacer que el certificado del CA se pueda instalar. Para ello ejecutar:

cd /etc/apache2/ssl
openssl x509 -inform pem -outform der < cacert.pem > cacert.der

cat >/usr/lib/cgi-bin/ca-cert <<EOF
#!/bin/sh
# ca-cert.sh
#
echo ”Content-Type: application/x-x509-ca-cert”; echo

cat /etc/apache2/ssl/cacert.der

EOF
chmod 755 /usr/lib/cgi-bin/ca-cert

Una vez hecho esto, instalar un certificado del CA se hará accediendo a http://servidor/cgi-bin/ca-cert (si tiene varios navegadores
no se si es necesario hacerlo en ¿todos?)

Si pones clave al certificado creo que se puede quitar con algo como lo siguiente (lo tengo un poco desordenado esto con lo que no lo aseguro🙂

# you'll be prompted for your passphrase one last time
openssl rsa -in key.pem -out newkey.pem

Often, you’ll have your private key and public certificate stored in the same file. If they are stored in a file called mycert.pem, you can construct a decrypted version called newcert.pem in two steps.

# you'll need to type your passphrase once more
openssl rsa -in mycert.pem -out newcert.pem
openssl x509 -in mycert.pem >>newcert.pem

Comentarios»

1. Compartir ficheros por Internet (por WebDAV) « El Weblog de Ivan Ricondo (Ubanov) - 9 diciembre, 2009

[…] crearte un certificado puedes usar la forma complicada (y elegante) que propongo en este artículo https://ubanov.wordpress.com/2009/12/02/como-crear-certificados-digitales-ser-un-ca/, o buscar por Internet otras […]


Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: