SSL: Creando una entidad certificadora

En posts anteriores hemos visto cómo crear servicios web seguros utilizando certificados. Los certificados era los por defecto de SSL en Linux o bien generabamos certificados autofirmados para el caso de IIS y el hecho que debíamos solicitar un certificado a una entidad certificadora (CA) para disponer de certificados válidos para operar en Internet. En este enlace teneis una buena descripción de qué es una infraestructura de clave pública o PKI.

En esta ocasión vamos a ver cómo crear nuestra propia entidad de certificación ( sobre un Debian 6, pero el procedimiento es idéntico si empleamos un Ubuntu). Posteriormente, vamos a emplear esta entidad de certificación para generar un certificado de servidor para otra máquina que la empleará para un servicio Apache. Esta situación puede ser útil si queremos desplegar en una intranet un sistema de certificados, tanto para equipos como para usuarios.

En primer lugar vamos a crear la entidad certificadora, para ello editamos el archivo /etc/ssl/openssl.cnf del equipo que se convertirá en autoridad de certificación y realizaremos las siguientes modificaciones:

ssl01Estamos indicando donde se va a crear la infraestructura de nuestra entidad de certificación, recorriendo el archivo podemos editar otras características, como por ejemplo la duración por defecto de los certificados ( 365 días es el valor inicial), la longitud de la clave, etc.

El siguiente paso, es crear la estructura de carpetas de la entidad de certificación y crear los archivos de gestión de los certificados creados, el archivo serial y el index.txt.

ssl03Ahora vamos a crear el certificado para la entidad certificadora, este certificado será el que después se deberá exportar a los diferentes servidores que vayan a utilizar sus certificados:

ssl04Ya tenemos creada nuestra entidad certificadora. Ahora vamos a una segunda máquina, en este caso un Ubuntu Desktop que hará las funciones de un servidor web que va a solicitar un certificado, para ello creamos una petición .csr y una clave privada micert.key. Para evitar el problema que la clave privada utilice una contraseña, que nos obligaría a introducirla cada vez que reiniciemos el servicio, se emplea el parámetro -nodes.

ssl05En la petición se nos requiere la información relativa al equipo o dominio para el que se va a solicitar el certificado:

ssl06Ahora deberíamos enviar este archivo .csr al servidor de la entidad certificadora, una vez que ésta lo recibe, generaremos el certificado a partir de él:

ssl07Como resultado de este comando, no sale un mensaje con la información del certificado generado y nos pide la confirmación de si queremos firmarlo.

ssl08Ahora deberíamos enviar al que será nuestro servidor web y lo deberíamos copiar en /etc/ssl/certs. Así mismo comprobamos la presencia de la clave privada del servidor.

ssl09Ahora tenemos que convertir nuestra entidad certificadora, en una entidad certificadora de confianza para el servidor web. Para ello enviamos el certificado de la CA (lo he renombrado como waytoit.pem para facilitar su localización) y lo copiamos en /etc/ssl/certs. Ahora hay que hacer un paso adicional para que funcione, tenemos que ver su hash y crerar un enlace al certificado que tenga como nombre su número de hash.0.

ssl11Podeis comprobar como para los diferentes certificados que ya están instalados, existe dicho enlace.

Comprobamos ahora el certificado que hemos solicitado:

ssl13Si no nos da ningún error, editamos el archivo de configuración de nuestra página segura para utilizar nuestro flamante certificado:

ssl14Por último, comprobamos desde el navegador las características de nuestro certificado:

ssl15Desde nuestra entidad certificadora podremos crear certificados tanto para usuarios como para máquinas, así como revocarlos para que dejen de ser válidos.

Fuentes: