El cajón de Drazul

El lugar donde duerme el pequeño dragón

Certificados SSL Válidos a Coste Cero.

Tal y como mencioné en una entrada anterior, la utilización de certificados SSL válidos en nuestras aplicaciones webs es un punto importante en el tema de la seguridad.

La seguridad basada en certificado SSL, el utilizado para establecer conexiones HTTPS, se basa principalmente en la confianza en las Autoridades Certificadoras (CA), que garantizan la identidad del servidor firmando su certificado SSL. Pero la identidad del emisor es solo uno de los puntos fundamentales de seguridad, por lo que gracias al protocolo SSL y a la utilización de certificados válidos la conexión entre el servidor y cualquier cliente está cifrada punto a punto mediante el intercambio de las claves públicas y autenticación basadas en certificados digitales (ej. Diffie-Hellman).

Las Autoridades Certificadoras suponen el pilar básico para la confianza en este sistema de seguridad y por tanto son su eslabón más débil. Las CA funcionan mediante un nivel jerárquico donde la CA de nivel superior firma el certificado de la CA de nivel inferior, siendo las de más bajo nivel las que firman los certificados que se encuentran en las webs. Hay varias CA de nivel superior y suelen venir configuradas en cualquier navegador, aunque hay varios casos extraños como que la CA del Gobierno de España no está configurada por defecto y hay que instalarla a mano si queremos que el navegador no nos de un fallo de seguridad y nos deje seguir utilizando alguna de sus webs [sic].

Una vez vistos los fundamentos básicos del funcionamiento de la seguridad basada en certificados digitales y SSL toca preguntarnos cómo obtener un certificado. Bueno, para esto hay multitud de empresas con precios muy diferentes que te pueden proporcionar desde solo la firma del certificado hasta cierta monitorización de seguridad. Por ejemplo Simantec ofrece certificados SSL a 399$ y por 995$ ofrece además monitorización de la seguridad [1].

Pero claro, a un coste de entrada de 400$ por certificado nos puede parecer demasiado la necesidad de tener varios certificados para varias webs en la misma empresa, incluso prescindir de este tipo de seguridad en los entornos de preproducción y/o testing debido al alto coste, pero para esto nació LetsEncrypt, una CA creada por el Internet Security Research Group (ISRG) que nos ofrece certificados válidos y gratuitos, tantos como queramos (aunque con ciertas limitaciones).

LetsEncrypt

Gracias a LetsEncrypt se pueden configurar todos los certificados que necesitemos, en todos los entornos que necesitemos a un coste cero, pero nos imponen ciertas restricciones que se pueden consultar actualizados aquí y resumo los más importantes a continuación:

  • 20 certificados nuevos cada semana.
  • Caducidad de 3 meses.
  • Renovación gratuita (sin consumir el cupo de 20 nuevos certificados por semana).

Ahora solo queda saber cómo funciona y se firman los certificados. El funcionamiento básico del programa de LetsEncrypt levanta un servidor HTTP en la máquina que queremos certificar al que accede la CA a través del nombre dado por el servidor DNS. Si el nombre del DNS lleva al servidor que levanta la aplicación entonces se generará un certificado válido firmado por la CA que ya podremos configurar y utilizar en nuestro servidor web.

Para utilizar la versión oficial, la desarrollada para sistemas GNU/Linux, se debe simplemente realizar los siguientes pasos (se puede consultar de forma más detallada aquí):

$ git clone https://github.com/letsencrypt/letsencrypt
$ cd letsencrypt
$ letsencrypt certonly --standalone -d www.example.com

Para renovar los certificados que tengamos en una máquina específica solo tenemos que ejecutar el comando

$ letsencrypt renew

con el que se consultará la fecha de caducidad de todos los certificados instalados y, si alguno está en su ventana de expiración (quedan menos de 30 días para que caduque), lo renovará de forma automática, por lo que esta tarea es recomendable añadirla como tarea periódica en el cron.

Monitorización de los certificados SSL

Aunque LetsEncrypt renueva automáticamente los certificados a punto de caducar, pueden suceder muchas cosas que lo impidan, como un error del software debido a factores externos como el que se haya roto una dependencia que utilize o cualquier otra cosa, por lo que se debería monitorizar el estado de la fecha de caducidad de todos los certificados que manejemos, estén o no generados con LetsEncrypt. Para ello solo nos basta ejecutar el siguiente comando:

$ echo | openssl s_client -connect www.example.com:443 2>/dev/null | openssl x509 -noout -dates

Comments