LetsEncrypt How To
Let’sEncrypt es un organismo que te permite obtener certificados SSL/TLS gratuitos para tus webs. Tal y como se describen ellos: «Let’s Encrypt es una autoridad de certificación (AC, o CA por sus siglas en inglés) gratuita, automatizada, y abierta, que existe para el beneficio del público. Es un servicio provisto por el Internet Security Research Group (ISRG).»
Aquí voy a contar mi experiencia sobre cómo conseguir uno para obtener el certificado, la clave privada y el certificado de la entidad certificadora que posteriormente se pueda usar en un servidor web.
Lo primero es tener instalada la herramienta certbot (el siguiente código es para sistemas basados en Ubuntu):
$ sudo apt install certbot
Para tener un certificado, Let’sEncrypt debe comprobar que el dominio es realmente tuyo. Para hacer esta comprobación genera unos datos (caracteres) y un nombre de fichero aleatorios. El fichero debe contener esos datos y ser accesible desde una URL que también genera certbot.
Existen plugins para generar ese fichero con esos datos y ubicarlo en el directorio apropiado del servidor web (Apache, Ngix, etc.) para que sea accesible desde la URL que genera. Pero estos plugins no pueden usarse cuando tu web está alojada en un proveedor del que no tienes accesso a shell y no puedes ejecutar (ni instalar) certbot.
Entonces, tanto para generarlo como para renovarlo, se instala certbot en una máquina y se ejecuta en modo manual y se van respondiendo las preguntas oportunas. Cuando genere los datos, el nombre de fichero y la URL, se entra en el proveedor y se coloca allí un fichero con esos datos y que sea accesible desde la URL que nos dice:
# certbot certonly --manual
En el caso de esta web:
Please enter in your domain name(s)
(comma and/or space separated) (Enter 'c' to cancel):
www.tecnicaso.es
[...]
Create a file containing just this data:
D9CMHSQGjAZhbM3OinoP4lre3JsJ7TphCjorzj1jf_T.az6TFJ4QTfDk7g60rz5N_-452FMUFuN5rQhY-ygnKRw
And make it available on your web server at this URL:
http://www.tecnicaso.es/.well-known/acme-challenge/D9CMHSQGjAZhbM3OinoP4lre3JsJ7TphCjorzj1jf_T
Pues hacemos caso y creamos un fichero con ese nombre (por ejemplo: ~/tmp/D9CMHSQGjAZhbM3OinoP4lre3JsJ7TphCjorzj1jf_T
) y que tenga de contenido la cadena rara y más larga de arriba. Ese fichero tiene que estar accesible desde la URL que indica para que Let’sEncrypt pueda bajárselo desde ese dominio y comparar con lo que ha generado y así comprobar que ese dominio es tuyo. Para hacer que ese fichero esté disponible en nuestro servicio web, en caso de una instalación estándar de Apache, lo ponemos en /var/www/…
# mkdir -p /var/www/html/.well-known/acme-challenge/
# cp ~/tmp/D9CMHSQGjAZhbM3OinoP4lre3JsJ7TphCjorzj1jf_T /var/www/html/.well-known/acme-challenge/
En caso de usar WordPress en un alojamiento externo (como el caso de la web que estás viendo), también hay que dejar accesible ese fichero con ese nombre y ese contenido. Para ello, se sube por FTP creando los directorios correspondientes. En mi caso, que es una instalación estándar de WordPress realizada automáticamente por el servicio de alojamiento web externo, lo he tenido que poner en /public/.well-known/acme-challenge/
Para asegurar que todo va a ir bien, es más que conveniente comprobar a introducir la URL que nos dice Let’sEncrypt en un navegador y ver que, efectivamente, sale la cadena larga como contenido. Una vez comprobado, pulsamos Enter (↩) y todo irá bien para respondernos con la localización (directorio) donde nos ha descargado los certificados:
- cert.pem es el fichero que contiene el certificado.
- privkey.pem es el fichero que contiene la clave privada o clave SSL.
- chain.pem es el fichero que contiene el certificado de autoridad.
Ya solo tienes que poner esos ficheros accesibles desde la configuración de tu Apache, Nginx, o el servidor que utilices, o bien, en la configuración del subdominio en tu proveedor de servicios (que en mi caso es DonDominio, cert.pem va a CERTIFICADO, privkey.pem a CLAVE SSL y chain.pem a ENTIDAD CERTIFICADORA -aunque probablemente solo la parte primera-).
BOLA EXTRA:
Para hacerlo automáticamente se pueden usar estos dos comandos: El primero para conseguir el certificado…
# certbot-auto certonly --webroot -w /eui/adm/hosting/phpma/ -d hostal.etsisi.upm.es --register-unsafely-without-email
… y el segundo ponerlo en el cron:
# certbot-auto renew
Lo malo es que el script certbot-auto está obsoleto y no se puede usar ya. Habrá que actualizar esta entrada usando certbot con las opciones requeridas.