
Let’s Encrypt: Certificados SSL/TLS Gratuitos
Autor: fjavimartin
Fecha de Creación: 06/03/2017
Categorías:
Un certificado muy básico suele tener un costo de unos 42,24€/año, pero si además queremos que nos sirva para un número indeterminado de subdominios puede alcanzar los 179 €/año en los sitios más económicos.
Hoy descubriremos let’s encrypt y veremos que de una manera muy sencilla podemos hacernos con un certificado gratuito para asegurar nuestra web.
¿Que es Let’s Encrypt?
Let’s encrypt es una entidad certificadora abierta, gratuita y automática. Es un servicio suministrador por el Internet Security Research Group (ISRG).
El objetivo de esta organización es suministrar los certificados necesarios para habilitar HTTPS (SSL/TLS) en cualquier sitio web y de esta manera fomentar el uso seguro de estos servicios.
Las principales claves de Let’s Encrypt son:
- Gratis: El coste por la obtención de cualquier certificado seguro será cero.
- Automático: El software instalado en el servidor web podrá interactuar con Let’s Encrypt para obtener, configurar y renovar los certificados.
- Seguro: Let’s Encrypt servirá de plataforma para las mejores prácticas sobre TLS, tanto en el lado de la autoridad certificadora como en el de los administradores de sitios para asegurar sus webs.
- Transparent: Todos los certificados generados y revocados estarán a disposición de cualquiera que quiera inspeccionarlos.
- Abiertos: Todo el proceso para la generación y renovación de certificados será un estándar abierto que cualquiera puede adoptar.
- Cooperar: Más allá de los servicios que suministra, Let’s Encrypt es un esfuerzo por beneficiar a la comunidad más allá del control de cualquier organización.
¿Quién patrocina Let’s Encrypt?
Los principales patrocinadores de esta iniciativa son los gigantes de internet entre los que se encuentran: Google, Facebook, cisco, mozilla, etc.

Imagen 1 - Sponsors de Let's Encrypt
Cualquiera puede patrocinar este proyecto para asegurar la supervivencia del mismo, desde pequeñas empresas a clientes particulares mediante pequeñas donaciones a través de Paypal.
Creación del certificado (ubuntu)
El proceso para la creación de un certificado deberemos realizarlo desde la propia máquina del servidor web.
Para empezar a instalar necesitaremos instalar git:
# apt-get install git
Clonamos el repositorio del proyecto:
$ git clone https://github.com/letsencrypt/letsencrypt /home/usuario/git/letsencrypt
Nos vamos al directorio recién creado:
$ cd /home/usuario/git/letsencrypt
En este punto deberemos parar el servidor web puesto que el proceso de let’s encrypt utilizará los mismos puertos para solicitar los certificados y también deberemos ejecutar estas instrucciones con usuario root.
# ./letsencrypt-auto certonly –standalone -d <dominio>
Para solicitar varios dominios a la vez:
# ./letsencrypt-auto certonly –standalone -d <dominio> -d <dominio>
Los certificados generados se almacenarán en /etc/letsencrypt/live.
Renovación de certificados
Para renovar los certificados ejecutaremos el siguiente comando como usuario root:
# ./letsencrypt-auto renew
La salida del comando será algo parecido a esto:
usuario@servidor:~/git/letsencrypt$ sudo ./letsencrypt-auto renew
[sudo] password for fjmlillo:
Saving debug log to /var/log/letsencrypt/letsencrypt.log
-------------------------------------------------------------------------------
Processing /etc/letsencrypt/renewal/dominio.es.conf
-------------------------------------------------------------------------------
Cert is due for renewal, auto-renewing...
Renewing an existing certificate
Performing the following challenges:
tls-sni-01 challenge for dominio.es
Waiting for verification...
Cleaning up challenges
Generating key (2048 bits): /etc/letsencrypt/keys/0001_key-certbot.pem
Creating CSR: /etc/letsencrypt/csr/0001_csr-certbot.pem
-------------------------------------------------------------------------------
new certificate deployed without reload, fullchain is
/etc/letsencrypt/live/dominio.es/fullchain.pem
-------------------------------------------------------------------------------
Congratulations, all renewals succeeded. The following certs have been renewed:
/etc/letsencrypt/live/dominio.es/fullchain.pem (success)
Podemos ir un poco más allá automatizando el proceso con la siguiente línea en nuestro crontab:
30 2 * * 1 /opt/letsencrypt/letsencrypt-auto renew >> /var/log/le-renew.log
Revocar certificados
Revocar un certificado es muy sencillo, solamente tendremos que indicar la ruta a la key del certificado que queramos revocar y, como en los casos anteriores, ejecutaremos el comando como root:
# ./letsencrypt-auto revoke --cert-path /etc/letsencrypt/live/<dominio>/cert.pem --key-path /etc/letsencrypt/live/<dominio>/privkey.pem
Actualización del repositorio Let’s Encrypt
$ cd /home/usuario/git/letsencrypt
$ git pull
Configuración de https en apache
Para configurar https en cualquier de nuestros sitios web deberemos cargar el módulo ssl de apache si es que no lo tenemos cargado ya:
# a2enmod ssl
Crearemos un VirtualHost nuevo para nuestra conexión segura tomando de partida la configuración normal y añadiremos las siguientes líneas al final:
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/<dominio>/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/<dominio>/privkey.pem
Nuestro VirtualHost se parecerá bastante a lo siguiente:
<VirtualHost *:443>
ServerAdmin soporte@dominio.es
ServerName www.dominio.es
DocumentRoot /var/www/
RewriteEngine On
RewriteOptions inherit
<Directory /var/www/>
Options FollowSymLinks Indexes
AllowOverride All
order allow,deny
allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/dominio_error.log
CustomLog ${APACHE_LOG_DIR}/dominio_access.log combined
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/<dominio>/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/<dominio>/privkey.pem
</VirtualHost>
Por último tendremos que reiniciar apache:
# service apache2 restart
Forzar conexión por https
Ya que tenemos configurado nuestro dominio por https quizás nos interese forzar la conexión de todos nuestros usuarios por este medio para lo que deberemos activar el siguiente módulo en apache:
# a2enmod rewrite
Editamos el VirtualHost del dominio que escucha en el puerto 80 para que redirija a nuestro sitio seguro con las siguientes líneas:
RewriteEngine on
RewriteCond %{HTTPS} !=on
RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]
Reiniciamos apache para que coja los cambios:
# service apache2 restart