Uso de certificados emitidos por Let's Encrypt

30/03/2016

Let’s Encrypt ha sido desarrollado principalmente para funcionar el plataformas UNIX. A pesar de eso, es posible usar los certificados en servidores web Windows usando IIS. Este documento es una guía básica de uso y creación de certificados de Let’s Encrypt para ambas plataformas.

Instalación del cliente Let's Encrypt

La instalación del cliente de Let’s Encrypt puede realizarse por paquetes en algunas versiones de UNIX, para aquellas que no cuentan con esta opción es posible descargar el cliente de un repositorio de github y utilizarlo como si se tratara de un paquete más.

FreeBSD

  • Port: cd /usr/ports/security/py-letsencrypt && make install clean
  • Package: pkg install py27-letsencrypt

OpenBSD

  • Port: cd /usr/ports/security/letsencrypt/client && make install clean
  • Package: pkg_add letsencrypt

Arch Linux

sudo pacman -S letsencrypt letsencrypt-apache

Debian (Strech o SID)

apt-get update

apt-get install letsencrypt python-letsencrypt-apache

Fedora

sudo dnf install letsencrypt

Gentoo (Portage)

emerge -av app-crypt/letsencrypt

emerge -av app-crypt/letsencrypt-apache

Github

apt-get install git

git clone https://github.com/letsencrypt/letsencrypt

cd letsencrypt

./letsencrypt-auto --help

El último comando instalará todas las dependencias necesarias para el funcionamiento de letsencrypt en el equipo.

Existen dos formas de solicitar certificados: manual y automática. A continuación, se muestra el proceso para cada una de ellas.

Solicitud de Certificados (Manual)

En un equipo UNIX, haciendo uso del cliente de Let’s Encrypt instalado anteriormente, se solicitarán los certificados a la CA de Let’s Encrypt. Para esto son necesarias dos cosas:

  • Comprobar que tenemos el control del sitio para el cual se emitirá el certificado teniendo acceso al servidor web y privilegios para la creación de archivos en el mismo.
  • Verificar que el nombre de dominio para el que se emitirá el certificado sea público (visible desde internet).

Estos puntos son importantes ya que sin ellos no se podrá emitir un certificado.

Nota: Let’s Encrypt ha establecido un límite de 5 certificados cada 7 días que pueden solicitarse para un dominio. Para no alcanzar ese límite mientras se hacen pruebas se recomienda hacer uso del switch --test-cert al ejecutar los comandos, el cual indica al cliente que haga uso de una CA diferente. Los certificados emitidos por esa CA no son válidos y son solo para pruebas. Cuando estemos seguros del proceso a seguir basta con omitir el switch para obtener certificados válidos.

Solicitud

La solicitud e instalación manual debe hacerse en caso de que no se tenga acceso directo al servidor web o bien que este se ejecute en plataformas Windows.

Para esta guía se usaran los comandos descargados mediante el repositorio GIT. Si se tiene una instalación por paquetes hay que sustituir ./letsencrypt-auto por letsencrypt. El proceso es el siguiente:

1.- Ejecutar el comando mostrado a continuación

./letsencrypt-auto certonly --test-cert -d dominio.algo --manual

Si es la primera vez que se ejecuta el comando en el servidor nos solicitará un correo con el cual podremos recuperar nuestros certificados o llaves en caso de alguna emergencia.

2.- Leer y aceptar los términos de servicio:

3.- Al ser una solicitud manual, se almacenará la dirección IP del equipo desde el cual se está haciendo la solicitud, es necesario aceptar esto para continuar.

4.- El cliente generará un código, el cual deberá ser el contenido de un archivo nuevo y colocarse en la dirección indicada en el servidor web. Es importante no dar enter antes de colocar este archivo en el servidor ya que se tendrá que repetir el proceso nuevamente y el código cambiará.

Para Unix

Colocar el archivo solicitado en un servidor UNIX es relativamente sencillo, solo basta con crear los directorios solicitados y colocar el archivo, o bien, ejecutar los comandos (como root) en el servidor destino.

Para Windows (IIS)

Los servidores web Windows requieren un proceso más largo para colocar los archivos solicitados.

  1. Crear una carpeta con el nombre .well-known. dentro del directorio raíz de nuestro sitio web. Es importante colocar los dos puntos al inicio y al final del nombre para que Windows respete el primer punto requerido por el cliente de Let’s Encrypt.

b. Crear los otros directorios restantes y colocar el archivo con el nombre requerido (sin extensión) con el contenido mostrado por el cliente.

c. IIS por defecto no muestra archivos sin extensión, por lo que si se hace una solicitud al archivo creado el servidor mostrara un mensaje con código de error 404.

Para solucionar esto, se debe agregar a nivel de sitio o servidor (según se requiera) un nuevo MIME Type.

d. Una vez abierta la opción Mime Types se mostrará un panel del lado derecho en donde daremos clic en Add…

Esto desplegará una ventana que debe llenarse como se muestra a continuación:

e. Agregado el MIME Type se debe reiniciar el sitio web (o el servicio de IIS) para que los cambios surtan efecto. Debemos verificar que podamos ver el archivo en el servidor.

En ambas plataformas

Una vez que el archivo es visible en la URL generada por el cliente de Let’s Encrypt, procedemos a dar ENTER en la consola donde nos quedamos anteriormente. El cliente generará una llave privada, creará una solicitud de firma de certificado y la enviará a la CA. La CA verificará los datos y devolverá 3 certificados: el certificado del servidor firmado, el certificado de la CA intermediaria y el certificado con la jerarquía completa de CAs de Let’s Encrypt.

Instalación de certificados (Manual)

Los certificados obtenidos de forma manual se almacenarán en /etc/letsencrypt/archive/dominio.algo/.

Los nombres de los archivos son los siguientes, pueden incluir un número (#) después del nombre indicando la versión del certificado:

  • privkey#.pem: clave privada del certificado. Debe mantenerse bien resguardada y no compartirse con nadie.
  • cert#.pem: Certificado del servidor
  • chain#.pem: Incluye todos los certificados que necesitan ser verificados por los navegadores, exceptuando el certificado del servidor (ejemplo: CA root e intermediarias).
  • fullchain#.pem: todos los certificados, es la concatenación de los archivos chain.pem y cert.pem.

Para Unix

La instalación y uso de los certificados en Unix requiere habilitar el modulo SSL del servidor apache. Una vez hecho eso se debe modificar o crear un Virtual Host para el sitio indicando la ruta donde se ubican los certificados a usar.

Para Windows

Para instalar y usar los certificados en servidores Windows se requiere convertir dichos certificados a un formato compatible con IIS.

  1. Ejecutar el comando mostrado a continuación:

openssl pkcs12 -export -out csc.pfx -inkey privkey1.pem -in cert1.pem -certfile chain1.pem

Donde el texto en negritas indica el nombre del archivo PFX que se generará. Se solicitará una contraseña para proteger el archivo, esta debe ser fuerte ya que dicho archivo contiene las claves públicas y privadas del servidor.

Pasar el archivo creado al servidor web Windows donde se usará.

b. En el servidor Windows, dentro de la consola de administración de IIS, a nivel de servidor ubicar “Server Certificates” y dar doble clic.

c. En el panel que se despliega, buscar y dar clic en la opción Import:

d. Indicar la ruta del archivo PFX y la contraseña utilizada para protegerlo.

e. Verificar que en panel de certificados aparece el nuevo certificado emitido por la autoridad certificadora de Let’s Encrypt. En caso de ser un certificado generado con el swtich --test-cert aparecerá una entidad certificadora diferente (Fake).

f. Editar los bindings HTTPS del sitio web e indicar el certificado a utilizar.

Verificar que el certificado emitido sea de confianza en el navegador web. En caso de haber usado el swtich --tets-cert el certificado no será confiable ya que solo es de prueba.

Solicitud e instalación de certificados (automática)

El proceso de solicitud automática funciona únicamente si el cliente se ejecuta en el servidor web que está ejecutando Apache. Este proceso hace la verificación del control del sitio y del dominio sin la necesidad de crear nuevos archivos. Adicionalmente genera un archivo Virtual Host con todos los datos necesarios para que el sitio funcione con HTTPS.

Para eso es necesario ejecutar únicamente un comando:

./letsencrypt-auto --test-cert --apache -d dominio.algo

Seleccionar una de las opciones mostradas dependiendo de la configuración que se requiera:

El cliente hará la configuración automática, y mostrará un mensaje cuando la configuración haya terminado.

Verificar que el certificado se haya instalado correctamente

Referencias

Liberación original: Miércoles, 30 Marzo 2016
Última revisión: Miércoles, 30 Marzo 2016

La Coordinación de Seguridad de la Información/UNAM-CERT agradece el apoyo en la elaboración y revisión de este documento a:

Ricardo Andrés Carmona Domínguez 

Para mayor información acerca de este documento contactar a:

UNAM-CERT: Equipo de Respuesta a Incidentes UNAM 
Coordinación de Seguridad de la Información 
Dirección General de Cómputo y Tecnologías de Información y Comunicación 
Universidad Nacional Autónoma de México 
E-Mail: incidentes@cert.unam.mx 
http://www.cert.org.mx
http://www.seguridad.unam.mx
ftp://ftp.seguridad.unam.mx
Tel: 56 22 81 69