Por fin, certificados SSL gratuitos para tu web. De http a https sin pagar ni un duro.

Allá por el 2014 Google anunció que daría un extra de puntuación en SEO a todos aquellos sites que utilizasen conexiones seguras (https). Este anuncio fue un gran impulso mas en pro de la seguridad de la red. Poco hacía que este tema habia empezado a preocupar a la gente, tras los escándalos de la N.S.A., Snowden y compañía.

Aunque cifrar las comunicaciones HTTP debería ser un standard de seguridad para evitar ataques “Man In the Middle”, especialmente en redes WiFi públicas (por poner un ejemplo), su uso no es tan extendido en blogs o websites pequeños. Esto es debido a dos factores: por un lado el desconocimiento del gran público acerca de la seguridad informática (analfabetos digitales) y por otro, y mucho mas importante, el elevado coste que supone comprar (o mejor dicho alquilar el derecho) un certificado S.S.L. para tu web firmado por cualquiera de los C.A.’s (Autoridad Certificadora) existentes. Este tipo de empresa gasta precios de “notarios” físicos aunque no tengan que hacer “ni el huevo” (al estilo de los que venden nombres de dominio, que en el 90% de los casos son los mismos). Realmente solo vale la pena pagar estos precios si tu web genera los suficientes ingresos como para que no sientas que tiras el dinero inutilmente.

portada

Tiempo atrás, una organización pública llamada “Internet Security Research Group” (ISRG) puso en marcha un proyecto para ofrecer certificados SSL/TLS gratuitos a través de la iniciativa “Let’s Encrypt” ( https://letsencrypt.org/ ) que actualmente esta en fase beta pública, o mejor dicho… ya podemos hacernos con certificados S.S.L. “sin pagar ni un duro”.

La forma tradicional de tener un certificado S.S.L. válido y “trusted”, era generarlo por ti mismo y que una autoridad certificadora te lo firme o dicho de otro modo, certifique que el certificado pertenece al “site” que dice ser y no se trata de un “fake”. “Let’s Encrypt” le ha dado la vuelta a esto y ahora, mediante un servidor A.C.M.E. (Automatic Certificate Management Environment) y un cliente en tu servidor, tu mismo puedes hacer que el servidor A.C.M.E. te firme el certificado al instante, al contrario que los certificados tradicionales que aunque son rápidos, siempre tienes que esperar un poco a que validen que todo está correcto antes de recibir tu certificado final firmado.

El proceso con “Let’s Encrypt“, a grandes rasgos es el siguiente:

Te bajas su cliente por defecto, (también es posible utilizar un cliente de terceros o crear el tuyo propio). Este cliente se debe comunicar con el servidor A.C.M.E. desde el propio servidor asociado al dominio/subdominio que a su vez va asociado al certificado. El servidor A.C.M.E. comprueba si el cliente se conecta desde la misma I.P. que el registro tipo “A” del dominio/subdominio al que irá asociado el certificado. Si es así, lo firma y ya lo puedes usar en tu web.

El cliente oficial está bastante completito y entre muchas otras cosas, se autoinstala sus propias dependencias (al menos en distros basadas en instaladores “yum” y “apt”), por lo que no debemos preocuparnos de instalarlas por nosotros mismos. De hecho, es tan completo, que hasta te configura Apache para usar el certificado, lo cual puede estar bien para gente con pocos conocimientos.

Como yo no soy muy fan de las autoconfiguraciones, y después de comprobar que el soporte para distros tipo “Amazon Linux” es limitado, os voy a enseñar como obtener simplemente los certificados. La configuración de éstos en Apache y/o NGinx corre de vuestra cuenta ( hay miles sitios en Internet donde explican como hacerlo).

– Antes de empezar, debemos parar temporalmente el servidor web (Apache, NGinx o lo que utilicemos, ya que el cliente oficial así lo requiere ya que se comunicará por el puerto 80).

ami_step7_stophttpd

Ubuntu

sudo service apache2 stop

Amazon Linux

sudo service httpd stop

– Actualizamos sistema y repositorios (como deberiamos hacer siempre) para obtener las últimas versiones:

Ubuntu

sudo apt-get update && sudo apt-get upgrade

Amazon Linux

sudo yum update

– Instalamos “git” si es que no lo tenemos instalado ya

Ubuntu

sudo apt-get install git

ubu_step1_gitinstall

Amazon Linux

sudo yum install git

ami_step1_gitinstall

– Descargamos la última versión del cliente desde su repositorio oficial

General (Ubuntu y Amazon Linux)

cd ~ && git clone https://github.com/letsencrypt/letsencrypt && cd ./letsencrypt

– Ejecutamos el cliente con el parametro “certonly” para que instale dependencias pero “SOLO” genere y firme certificados sin necesidad de tocar nuestras configuraciones del servidor web (recordad de nuevo haber parado el servidor web previamente).

Ubuntu

./letsencrypt-auto certonly

Amazon Linux

./letsencrypt-auto certonly --debug

En el caso de Amazon Linux, debemos añadir el parámetro “–debug” sino, el cliente nos mostrará lo sguiente:

WARNING: Amazon Linux support is very experimental at present...
if you would like to work on improving it, please ensure you have backups
and then run this script again with the --debug flag

ami_step2_Amazon Linux experimental

– Tras instalar todas las dependencias y si todo ha ido bien, el cliente se ejecutará y nos pedira introducir el e-mail:

ubu_step4_emailregistration2

– Tras el e-mail nos pide que aceptéis las condiciones del servicio (bla, bla, bla, …):

ubu_step5_agreement

– Aceptamos las “T.O.S.” (“Terms of Service”) y a continuación se nos pide el dominio para el cual crear el certificado. Recordad que si el registro tipo “A” del dominio o subdominio que vais a poner no está apuntando actualmente a la I.P. del servidor donde estáis ejecutando el cliente “Let’s Encrypt“, la certificación fallará (basicamente porqué no podéis demostrar que sois dueños del dominio/subdominio). Si ese es el caso, editar los D.N.S de vuestro dominio/subdominio y esperad un poco a que se propaguen antes de seguir con el cliente de “Let’s Encrypt“.

ubu_step6_domain

– Si todo ha ido bien, el cliente finalizará y os mostrará el directorio donde tenéis los certificados (clave pública, privada, chain, etc…). Normalmente los guarda bajo el directorio /etc/letsencrypt/live/<dominio_seleccionado>/, asi que los podéis llamar directamente desde ahí, en la configuracion de vuestro servidor web.

ubu_step9_finish

Y asi es como se obtienen certificados firmados por un C.A. autorizado sin pasar por caja. Podéis comprobar que los certificados son perfectamente válidos viendo el certificado de este mismo blog.

Como apunte… yo he probado el cliente en diferentes tipos de máquina virtual en “Amazon Web Services” y solo he encontrado un pequeño “problemilla” con las A.M.I de Bitnami. Para ese caso, debéis ejecutar “letsencrypt” tras ejecutar previamente la consola de bitnami, es decir:

./use <maquina_de_bitnami
./letsencrypt-auto certonly

Más información sobre la consola Bitnami en https://wiki.bitnami.com/Components/BitNami_console

Ahora solo os queda buscar como configurar “https” en vuestro servidor web y no os olvidéis de “testear” vuestra configuración en https://www.ssllabs.com/ssltest

Ya no tenéis excusa para no poner “https” en vuestro sitio web, siempre y cuando vuestro “hosting” os lo permita.

Si te ha gustado y quieres compartir esta página..