16
Certificados Digitales
Desde hace muchos años, la web implementa SSL (Secure Socket Layer) y su sucesor, TLS (Transport Layer Security), como protocolos para establecer enlaces cifrados entre redes. Es por ello que es esencial el uso de certificados en cualquier servicio web moderno.
SSL y TLS funcionan mediante certificados de clave pública x.509. Básicamente estos certificados vinculan la identidad de una entidad a un par de claves criptográficas. Cada par consta de una clave pública y una clave privada, la primera se distribuye mediante certificados mientras que la segunda se mantiene segura. Esto permite, mediante el criptografía asimétrica, crear una conexión segura entre un cliente y un servicio.
En este punto es donde entran las autoridades certificadoras. Básicamente son autoridades de confianza que verifican la identidad de los servicios web antes de generar los certificados que hemos mencionado antes. Así, un navegador web tiene ciertas garantías de la legitimidad de una página si el certificado ha sido emitido por una de estas autoridades.
Vamos ahora a ver cómo generar estos certificados para poder utilizarlos en nuestros servicios. Vamos a empezar con el método más simple, generar estos certificados por nuestra cuenta. Este método es bastante sencillo, pero implica que los navegadores y otras herramientas generarán alertas al no ser certificados emitidos por una autoridad certificadora.
La herramienta más extendida para generar estos certificados es OpenSSL, es por ello que hay que tener instalada esta utilidad como requisito previo. Ahora simplemente hay que seguir los siguientes pasos:
- Generar una clave privada RSA con AES256 con contraseña
openssl genrsa -aes256 -passout pass:[TU CONTRASEÑA] -out service.pass.key 4096
openssl rsa -passin pass:[TU CONTRASEÑA] -in services.pass.key -out service.key
rm service.pass.key
- Generar el certificado con la clave privada
openssl req -new -x509 -key service.key -out cert.crt -days 365
Siguiendo estos pasos generaremos un certificado llamado cert.crt
listo para su uso.
Si os habéis fijado, antes de crear el fichero, nos han pedido cierta información para generar una petición de certificado. Esto es lo que se conoce como CSR o Certificate Signing Request. Un CSR consiste básicamente en la clave pública de un par de claves e información adicional, como el país del certificado, mail de la empresa firmante, etc. Estos dos componentes se insertan en la creación del certificado. A continuación voy a mostrar como generar un CSR y como generar un certificado con un CSR ya creado, como veréis es muy similar.
- Generar un CSR con una clave privada
openssl req -new -key service.key -out service.csr
- Generar certificado mediante un CSR
openssl x509 -req -sha256 -days 356 -in service.csr -signkey service.key -out service.crt
Hasta ahora hemos hablado de certificados autofirmados, que están bien para probar servicios en etapa de desarrollo. Pero en el momento que creamos un despliegue en producción es esencial tener certificados emitidos por una autoridad certificadora.
Entre las muchas entidades certificadoras, personalmente suelo usar letsencrypt y su herramienta certbot de forma automatizada en mis despliegues. Ya que es posible, teniendo un dominio asegurado, generar en pocos pasos certificados que podrán auto-renovarse automáticamente.
Para ello lo mejor es consultar la página de certbot y seguir los pasos determinados para el despliegue que vayamos a realizar.
Como habéis podido comprobar, los certificados son algo esencial en cualquier servicio web moderno. Gracias al comportamiento de los navegadores modernos, cualquier servicio con certificados mal configurados, expirados o simplemente sin ellos, son inmediatamente bloqueados, dificultando así su acceso y añadiendo una capa de seguridad. Es por ello muy importante asegurar el correcto funcionamiento de los certificados en producción.
Espero que este pequeño artículo os haya aclarado algunos conceptos y os ayude en el desarrollo de vuestras plataformas.
Saludos 👋
16