En criptografía una autoridad de certificación, certificadora o certificante (AC o CA por sus siglas en inglés Certification Authority) es una entidad de confianza, responsable de emitir y revocar los certificados digitales o certificados, utilizados en la firma electrónica, para lo cual se emplea la criptografía de clave pública. Jurídicamente es un caso particular de Prestador de Servicios de Certificación.

La Autoridad de Certificación, por sí misma o mediante la intervención de una Autoridad de Registro, verifica la identidad del solicitante de un certificado antes de su expedición o, en caso de certificados expedidos con la condición de revocados, elimina la revocación de los certificados al comprobar dicha identidad. Los certificados son documentos que recogen ciertos datos de su titular y su clave pública y están firmados electrónicamente por la Autoridad de Certificación utilizando su clave privada.

Certificado raiz

Preparación del escenario

Creamos el directorio raíz mkdir /root/ca y la estructura de directorios. Los archivos index.txt y serial actúan como una base de datos de archivos planos para realizar un seguimiento de los certificados firmados.

Creación fichero de configuración openssl.cnf

Debemos crear un fichero de configuración /root/ca/openssl.cnf el cual vamos a rellenar con lo siguiente:

Creamos clave privada para la entidad certificadora

Ahora vamos a crear el certificado para la entidad certificadora primero creamos la clave privada

Creamos certificado raiz de la entidad certificadora

Utilizamos la clave raíz ca.key.pem para crear un certificado raíz ca.cert.pem. Proporcione al certificado raíz una fecha de caducidad larga, como veinte años. Una vez que expire el certificado raíz, todos los certificados firmados por la entidad emisora ​​serán inválidos.

Creamos un certificado intermedio

El motivo principal del certificado intermedio es tener mas seguridad. Si la clave intermedia está comprometida, la entidad emisora ​​de certificados raíz puede revocar el certificado intermedio y crear un nuevo par criptográfico intermedio.

Preparar el escenario

Creamos el directorio raíz mkdir /root/ca/intermediate y la estructura de directorios. Los archivos index.txt y serial actúan como una base de datos de archivos planos para realizar un seguimiento de los certificados firmados.

Creación fichero de configuración openssl.cnf

Al igual que en el apartado anterior vamos a crear un fichero de configuracion /root/ca/intermediate/openssl.cnf

Se han cambiado cinco opciones en comparación con el archivo de configuración de la CA raíz:

Crear clave privada intermedia

Cree la clave intermediate.key.pem. Cifrar la clave intermedia con encriptación AES de 256 bits y una contraseña segura.

Crear certificado intermedio

Creamos el certificado intermedio igual que en el apartado anterior:

Para crear un certificado intermedio, utilice la entidad emisora ​​raíz con la v3_intermediate_ca para firmar la CSR intermedia. El certificado intermedio debe ser válido por un período más corto que el certificado raíz. Por ejemplo diez años sería razonable.

Para estar seguro de que lo hemos realizado correctamente vamos a comprobar el certificado intermedio:

Juntar certificado raiz e intermedio

Cuidado! Debes tener en cuenta que las peticiones de certificados deben de ser iguales es decir Country Name, State or Province Name, Locality Name, Organization Name, Organizational Unit Name, Common Name, Email Address .

Firmar los certificados de servidor y cliente

Firmaremos certificados utilizando nuestra CA intermedia

Solicitar certificado en el servidor web

Ya tenemos operativa nuestra entidad certificadora. Ahora desde una segunda maquina (una debian en mi caso) que hará la funciones de Servidor Web que va a solicitar un certificado, para ello vamos a crear tambien la estructura anterior:

Debemos crear un fichero de configuración /root/ca/openssl.cnf el cual vamos a rellenar con lo siguiente:

Una vez creado dicho fichero, generamos la clave privada:

Una vez tengo la clave privada, ya puedo generar la petición de certificado openssl req -new -key private/prueba.key.pem -out csr/prueba.csr.pem:

Y lo mandamos al servidor mediante scp.

Info! Los nombre de los ficheros .crs, .pem, .crt y los datos añadido son un ejemplo pueden variar según nos nuestra preferencias.

Generar certificado desde entidad con autoridad

El siguiente paso es mandar al administrador de la entidad certificadora el archivo .csr , una vez se reciba, generaremos el certificado de la siguiente manera:

Info! En este caso voy a transferirlo por “scp” pero podéis usar el método que prefirais. Tambien puedes enviar un correo cifrado como explico en esta entrada Firmar y cifrar un correo con GPG
Info! El segundo parámetro .key debe ser la clave privada de nuestro servidor para poder firmar el certificado.

.

Envío al servidor web y comprobar se encuentra nuestra clave privada

Ahora deberíamos enviar el certificado del servidor,el certificado intermedio y el certificado raiz, 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, para ello volvemos a utilizar scp y una vez en el Servidor Web lo copiamos a la carpeta /etc/ssl/certs.

Comprobamos que mi clave privada y el certificado son iguales

Para ello vamos a utilizar dos comandos uno para comprobar la clave privada openssl rsa -in /root/ca/private/prueba.key.pem -noout -modulus y el certificado firmado openssl x509 -in prueba.cert.pem -noout -modulus

Activar modulo SSL en Apache

Luego vamos a habilitar el módulo de SSL en Apache sudo a2enmod ssl:

Crear un virtual host para SSL

Creamos un virtual host sudo nano /etc/apache2/sites-available/default-ssl y vamos a añadir el siguiente contenido:

Info! Recuerda cambiar el “ServerName” al que tu prefieras.

Una vez configurado el certificado en el archivo virtual host, vamos a habilitarlo sudo a2ensite default-ssl:

Para que la configuración tenga efecto, vamos a cargarla nuevamente sudo service apache2 reload.

Bien, ahora tienen un certificado SSL configurado y funcionando.

Si en el paso anterior hay un error, puede encontrar el porque del error en el archivo /var/log/apache2/error.log.

Verificamos el certificado SSL desde un navegador

Una vez todo esta configurado, nos resta verificar la url desde nuestro navegador. Para esto vamos a escribir https://[Dominio].

La primera vez que intentemos acceder nos va a dar una alerta de que el certificado no es de confianza, esto es porque no hemos añadido o una excepcion sobre esa pagina o el certificado al navegador.

La solución es dar clic en Entiendo riesgo y luego en Anadir una excepcion con eso añadiremos esa pagina a nuestra lista de excepciones.

Debemos hacer clic en Confirmar excepcion de seguridad y ya la tendremos añadido, por lo tanto la comunicacion con tu dominio es segura (siempre y cuando la conexión se mantenga bajo https://), podrás observar el candado en verde y cerrado en la barra de navegación que lo confirma.

Y ya podemos observar que podemos acceder a la pagina de forma segura.