Cómo crear nuestra propia autoridad de Certificación

  Autor: Juan Manuel Merlos Tévar 
  Fecha: Octubre 2005

Introducción

Hay cierto tipo de tareas que requieren el uso de la tecnlogía de la criptografía de clave pública. En mi experiencia personal el uso principal ha sido durante la creación de redes privadas virtuales.

Por suerte o por desgracia para el lector de este texto (en función de lo que busque) no vamos a explicar los conceptos de la criptografía de clave pública, sólo introduciremos vagamente el concepto de autoridad de certificación.

Autoridad de Certificación (cuyo acrónimo es AC o en Inglés CA): Es una entidad que que se encarga de firmar digitalmente certificados. Un usuario crea un certificado que le identifica, a continuación, éste le solicita a la autoridad de certificación que le firme ese certificado de tal forma que cualquier usuario que confíe en esa autoridad de certificación pueda confiar también en la veracidad de la identidad usuario cuyo certificado ha sido firmado. Una autoridad de certificación poseerá un certificado que será distribuído de forma pública y que servirá a los usuarios para comprobar si la firma ha sido hecha por dicha autoridad de certificación.

Las herramientas necesarias para la creación de una autoridad de certificación bajo el sistema operativo GNU/Linux se encuentran en el paquete openssl. Para realizar su instalación en el caso de Debian GNU/Linux:

 apt-get install openssl 

Creación de nuestra autoridad de Certificación

Los pasos para crear nuestra autoridad de certificación son los siguientes:

  1. Editar el fichero /etc/openssl (/usr/lib/ssl/openssl.cnf)

    • Cambiar la duración por defecto del certificado (days)
    • En caso de que los certificado sean para un Pocket PC cambiar el message diggest por defecto a sha1
      default_md = sha1
    • Editar el fichero /usr/lib/ssl/CA.sh buscando -days y ponerlo al valor adecuado. Éste será el tiempo que sea válida la autoridad de certificación (10 años serían 3650 días aproximadamente).
  2. Crear una autoridad de certificación (CA.sh ha de estar en el path, en Debian está en el directorio /usr/lib/misc/)

           cd 
           mkdir miCA
           cd miCA
           /usr/lib/misc/CA.pl -newca 
    
    CA certificate filename (or enter to create)
    
    Making CA certificate ...
    Generating a 1024 bit RSA private key
    ......................................++++++
    ..++++++
    writing new private key to './demoCA/private/./cakey.pem'
    Enter PEM pass phrase:
    Verifying - Enter PEM pass phrase:
    -----
    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) [AU]:ES
    State or Province Name (full name) [Some-State]:Provincia
    Locality Name (eg, city) []:Ciudad
    Organization Name (eg, company) [Internet Widgits Pty Ltd]:Merlos.org
    Organizational Unit Name (eg, section) []:Certificados 
    Common Name (eg, YOUR name) []:Nombre AC
    Email Address []:mimail@site.com
    

    Se crearán básicamente dos ficheros importantes, el certificado de la AC y su clave privada. Cada vez que queramos firmar un certificado tendremos que utilizar la clave que se nos pidió al crear la AC.

    		demoCA/cacert.pem 
    		demoCA/private/cakey.pem
    

    En general, el certificado de la autoridad de certificación (cacert.pem) deberá poseerlo cualquier usuario que desee comprobar la autenticidad de otros certificados firmados digitalmente por nuestra autoridad de certificación.

Creación de Certificados firmados por nuestra AC

Pasos para crear un nuevo certificado firmado por la autoridad de certificación:

	cd 
        cd miCA
	openssl req -new -keyout newkey.pem -out newreq.pem -days 360
	cat newkey.pem newreq.pem > new.csr
	openssl ca -policy policy_anything -out newcert.pem -infiles new.csr 

Cuando ejecutemos la solicitud del certificado (openssl req) se nos pedirán los datos del usuario que será propietario del certificado (son los mismos campos de datos que se nos pidieron al crear la AC).

Los ficheros creados son:


       newkey.pem: Clave privada del usuario
       newreq.pem: Solicitud de Certificado (Certificate request)
       newcert.pem: Certificado X.509 del usuario firmado por la AC

Es posible que tengamos que convertir los certificados a formatos aceptados por sistemas operativos comerciales (léase MS WinDows), para ello podremos ejecutar los siguientes comandos:

Convertir de formato PEM a formato DER (Windows)

	openssl x509 -in cacert.pem -out cacert.cer -sha1 -outform DER

Convertir de formato PEM a formato P12 (Windows)

     
      openssl pkcs12 -export -in newcert.pem -inkey newkey.pem -certfile demoCA/cacert.pem -out newcert.p12

Cuando se importe este certificado P12, se estará importando también el certificado de la autoridad de certificación, así como la clave privada, así que sólo es necesario este fichero.

Otras tareas comunes

Generar el fichero CRL

         openssl ca -gencrl -out crl.pem

Este fichero contiene la información de los certificados que han sido revocados, por tanto, cuando revoquemos algún certificado deberemos actualizar este fichero y copiarlo en los lugares que lo utilicen.

Revocar un Certificado

Esta tarea se realiza cuando un certificado ha dejado de tener validez o ya no confiamos en la persona que lo posee

    openssl ca -revoke certificado.pem

Generar los parámetros DH (Diffie hellman)

         openssl dhparam -out dh1024.pem 1024