Ha llegado el momento de entrar en harina. Como hemos dicho, el cliente certbot nos permite crear certificados de Let’s Encrypt y nos permite hacer esto de varias formas según las necesidades que tengamos. Incluso cuenta con varios plugins para hacer la instalación de certificados de forma automática, como veremos después.
¡Importante! El cliente certbot necesita permisos de root tanto para crear el certificado (por ejemplo para poder guardarlo en /etc/letsencrypt) como para hacer la instalación con alguno de los plugins (para leer y modificar la configuración del webserver o hacer el bind del puerto 80 al 443).
Tanto si sólo queremos crear el certificado como si no existe la opción de instalación automática para nuestra plataforma, podemos usar el comando certonly.
Lo siguiente es ejecutar el propio comando. Hemos de indicar con -d cada dominio para el cual queremos el certificado (han de ser dominios asociados a la máquina en la que estamos) y un email de contacto en caso de necesidad. También podemos indicar otras propiedades como el tamaño de la clave RSA, pero eso es ya opcional. La primera vez que ejecutemos el cliente nos pedirá el email (si no lo hemos introducido en la llamada) y que aceptemos el acuerdo de Let’s Encrypt. Esto último también se puede automatizar mediante la opción –agree-tos.
$ ./opt/certbot/certbot-auto certonly -d domain.com --email user@email.com --rsa-key-size 4096
Se nos abrirá una interfaz en el propio terminal donde nos preguntará qué vía queremos usar para hacer la autenticación con la entidad certificadora. Las opciones son: mediante el plugin de apache (que además de autorizarnos para obtener el certificado lo instala, como veremos más adelante), mediante un servidor local indicando el directorio webroot correspondiente o utilizando un servidor web temporal (standalone).
2.1. Webroot
También podemos acceder directamente a la opción de autenticación que queramos por línea de comandos sin necesidad de pasar por la interfaz de selección. En el caso de la opción webroot sería:
$ ./opt/certbot/certbot-auto certonly --webroot -w /var/www/domain/ -d www.domain.com -d sub.domain.com -w /var/www/other -d other.org
Donde indicamos con la opción -w la dirección del directorio webroot correspondiente a los dominios que se indiquen justo después, cada uno acompañado de la opción -d. Y como se muestra en el ejemplo, se puede indicar más de un directorio webroot para dominios diferentes.
¡OJO! El plugin webroot crea un fichero temporal para cada uno de los dominios solicitados en ${webroot-path}/.well-known/acme-challenge . Esto quiere decir que el servidor ha de estar configurado para servir ficheros desde directorios ocultos, como es el caso de .well-known, o el servidor de validación de Let’s Encrypt no podrá comprobar que controlamos el dominio.
2.2. Standalone
Si no contamos con un servidor web local (o no queremos utilizarlo), podemos realizar la autenticación mediante un servidor temporal con el plugin standalone de certbot. La llamada sería:
$ ./opt/certbot/cerbot-auto certonly --standalone -d www.domain.com -d sub.domain.com -d other.org
El plugin necesita enlazar con el puerto 80 o el 443 para poder validar el dominio así que puede ser necesario parar un servidor existente antes de lanzar el cliente.
También se puede fijar el puerto a utilizar por el cliente mediante las opciones –standalone-supported-challenges http-01 para el 80 y –standalone-supported-challenges tls-sni-01 para el 443.
2.3. Manual
Y si nada de lo anterior te vale o simplemente eres todo un fanático del do it yourself siempre te queda la opción –manual (especificando certonly como en las anteriores) con la que te toca a ti realizar los pasos de la validación uno a uno. Nunca he utilizado esta opción pero según la documentación requiere copiar y pegar comandos en una sesión distinta del terminal que hasta puede estar en una máquina diferente.
2.4. Plugins y extensiones para la instalación automática
Hasta ahora hemos visto distintas formas de obtener el certificado y sólo quedaría instalarlo en función del servidor que tengamos. Aunque esto lo podemos hacer a mano, el cliente certbot cuenta con otros plugins que no sólo realizan la autenticación y nos proveen de un certificado sino que también se encargan de su instalación.
2.4.1. Apache
Si estamos ejecutando Apache 2.4 en un entorno basado en Debian (y con una versión 1.0+ del paquete libaugeas0), tenemos la opción de utilizar el plugin de Apache de Let’s Encrypt. Este nos permite automatizar no sólo la creación del certificado sino también su instalación, y todo esto sólo con añadir la opción –apache al comando anterior:
$ ./opt/certbot/certbot-auto --apache -d www.domain.com -d sub.domain.com -d other.org --email janedoe@email.com --rsa-key-size 4096
Esto lanza una interfaz en la propia línea de comandos donde se nos pide que aceptemos las condiciones legales y nos pregunta si queremos forzar que todo el tráfico sea por HTTPS, redirigiendo las peticiones del puerto 80 al 443. En función de nuestras respuestas, el cliente modifica el fichero de configuración de apache de nuestros dominios (por ejemplo /etc/apache2/sites-enabled/sub.domain.com.conf) y apuntará a los certificados creados.
En particular, se generará un certificado, un fichero de clave privada y uno de cadena de autenticación en el directorio: /etc/letsencrypt/archive/<nombre del dominio>. En nuestro ejemplo sería: /etc/letsencrypt/archive/sub.domain.com . Además, genera enlaces simbólicos a estos ficheros en el directorio: /etc/letsencrypt/live/<nombre del dominio>, que en nuestro ejemplo sería: /etc/letsencrypt/live/sub.domain.com
Aviso y consejo práctico: Let’s Encrypt es un poco especialito y no se lleva bien con los ficheros de configuración que contienen más de un virtualhost, como por ejemplo el del puerto 80 y el del 443 (da un error al no poder asociar un sólo virtualhost al dominio especificado). Si este es nuestro caso, antes de lanzar el cliente es mejor hacer un backup del .conf que ya tenemos en /etc/apache2/site-available y modificar el original para borrar el virtualhost del 443, dejando únicamente el del puerto 80. Luego, una vez hayamos instalado el certificado y haya creado el nuevo fichero para el 443 podemos completar este con las cosas que nos falten del backup.
El cliente crea un nuevo fichero de configuración de apache (/etc/apache2/sites-available/sub.domain.com-le-ssl.conf) donde se incluye la ruta a los enlaces anteriores. Sólo queda copiar del backup de nuestro fichero de configuración todo aquello que falte y añadírselo al fichero creado por Let’s Encrypt.
Podemos comprobar que el certificado se ha instalado correctamente utilizando el servicio de SSLLabs e indicando el nombre del dominio como parámetro del URL, que en nuestro ejemplo quedaría: https://www.ssllabs.com/ssltest/analyze.html?d=www.tea.ms
2.4.2. Plesk
Para el caso de Plesk la creación e instalación de certificados no viene integrada en el propio cliente sino que lo encontramos como un plugin de terceros. Lo podemos encontrar dentro de la propia herramienta de Plesk dentro del catálogo de extensiones. Sólo hemos de seleccionar la extensión de Let’s Encrypt e instalarla en nuestro Plesk.
Hecho esto la extensión aparecerá en nuestro listado de extensiones:
Para crear e instalar un nuevo certificado, seleccionamos la extensión de nuestra lista. Al entrar nos mostrará la lista de dominios correspondientes a la máquina. Seleccionamos el dominio sobre el que queremos crear el certificado y esto nos lleva a una nueva página donde hemos de indicar el email que queremos asociar y darle a Instalar. ¡Y listos!
La extensión no sólo crea e instala el certificado, sino que también añade la planificación para renovar el certificado cada 30 días (con lo que no haría falta seguir los pasos del siguiente punto). Vamos, que sólo le falta ponernos un lazo en el certificado 😛
2.4.3. Nginx
Aunque existe un plugin para la obtención e instalación de certificados en nginx está aún en fase experimental y no viene instalado junto con certbot-auto, aunque anuncian que una vez esté instalado podrá invocarse con la opción –nginx. Hasta entonces se puede obtener el certificado con alguno de los métodos comentados al principio de esta sección e instalarlo manualmente en el servidor.
Muchísimas gracias! Es justo lo que buscaba y necesitaba para iniciarme en esto de los certificados SSL. Saludos!
Muy bien explicado y cubre muchos supuestos y ámbitos. Muchas gracias.
Gracias por la info respecto a certificados, en tal sentido, que metodo me recomienda si necesito los certificados para un servidor QA de una intranet, tras un proxy?.
Salu2.
Disculpa la molestia, no sabes si en let´s encrypt se puede utilizar * como para validar multisitios, digamos que *.midominio.com y que cualquier cosa que venga delante de .midominio.com me tome el msimo certificado?
La web en español no tiene desperdicio, con frases como «Apoya un Web más seguro y respetador de la privacidad» te entran como ganas de soltar cosas como «que wea es aki?, me van a robal mis key bro?»