Certificados SSL

Para habilitar HTTPS en su página web, tiene que obtener un certificado (un tipo de archivo) de una Autoridad de Certificación (AC, o CA por sus siglas en inglés). Let’s Encrypt es una AC gratuita, automática y abierta.

Antes de obtener un certificado para su dominio web, Ud tiene que demonstrar control (propiedad) sobre dicho dominio. Con Let’s Encrypt, puede hacer esto con el software cliente que usa el protocolo ACME llamado Certbot (aunque existen otras alternativas como openSSL).

Determinar el método que funcionará mejor para ti, depende básicamente de tus conocimientos y tipo de accesos que tengas en tu hosting. Hay varias opciones de acceso a tu servidor contratado. Mira la clasificación en grupos:

  1. Tengo acceso total al shell con usuario administrador (root o sudo).
  2. Tengo acceso al shell (acceso SSH via PuTTY) y al panel de control (cPanel, Plesk o WordPress).
  3. No tengo acceso al shell o desconozco el manejo de PuTTY, pero si tengo acceso al panel de control (cPanel, Plesk o WordPress).
  4. No tengo acceso al panel de control.

Si perteneces al grupo: 1 o 2, podrás automatizar la emisión y renovación de certificados, con solo instalar y configurar el cliente ACME Certbot en el propio servidor. Aquí tu siguiente tarea seria descargar el cliente ACME Certbot adecuado según el sistema operativo de tu servidor o investigar algún otro cliente ACME que prefieras.

Si estas en el grupo 1 o 2 este manual no es para ti.

Si perteneces al grupo 3, es decir no tienes o no sabes usar el shell (acceso SSH), pero tienes acceso al panel de control (cPanel) y quieres obtener certificados gratuitos SSL de Let’s Encrypt estas en el lugar correcto y te animo a seguir para lograrlo.

Si perteneces al grupo 4, también debes seguir estas instrucciones y al finalizar pedirle a tu proveedor de hosting que instale los certificados que obtuviste por este método.

Descripción del proceso

El proceso consta de cinco (5) pasos básicos:

  1. Elegir, descargar e instalar el cliente ACME Certbot mas adecuado a tus necesidades.
  2. Ejecutar cliente ACME Certbot
  3. Aprobar el desafío ACME.
  4. Obtener certificado.
  5. Instalar los certificados obtenidos desde Let’s Encrypt via el cliente Certbot.

Descripción cliente ACME Certbot

Lo primero sera descargar e instalar un cliente ACME Certbot adecuado al sistema operativo de nuestra computadora para poder instalarlo y ejecutarlo.

Si, no estoy equivocado el cliente se ejecutara en la computadora de tu casa u oficina, localmente, no en el servidor donde esta alojada tu pagina web. Tranquilo lo que haremos no tiene ningún peligro y se llama hacer todo manualmente.

certbot [comandos] [opciones] [-d su_dominio]

Dicha computadora se comunicara con el servidor de Let’s Encrypt para enviar datos, recibir instrucciones y los certificados al final del proceso por lo que debe tener internet.

certbot certonly --manual
certbot certonly --manual -d su_dominio
certbot certonly --manual -d su_dominio -d *.su_domino --manual-public-ip-loggin --rsa-key-size 4096 -vvv
Comandos
ComandoDescripción
certonlyObtener o renovar un certificado, pero no lo instala.
renewRenueve todos los certificados obtenidos previamente que estén a punto de caducar.
certificatesMuestra información sobre los certificados creados con Certbot en esta computadora.
revokeRevocar certificado. Debe dar --cert_name o --cert_path
deleteBorra certificado. Aparece menú.
registerCrear una cuenta ACME.
unregisterDesactivar una cuenta ACME.
update_accountActualizar cuenta ACME.
Opciones
OpciónDescripción
--manualObtener certificado de forma interactiva o con ganchos (hook) de script de shell.
--agree-tosAceptar la licencia ACME.
--manual-public-ip-logginAceptar el registro publico de tu IP. Predeterminado es preguntar.
--debug-challengesDespués de configurar los desafíos, espere la entrada del usuario antes de enviar a CA. Predeterminado: falso.
--register-unsafely-without-emailPermite registrar una cuenta sin dirección de correo electrónico. Esto se desaconseja encarecidamente, porque en caso de pérdida de clave o compromiso de la cuenta, perderá irrevocablemente el acceso a su cuenta. Tampoco podrá recibir notificaciones sobre el vencimiento o la revocación inminentes de sus certificados. Las actualizaciones del Acuerdo del suscriptor aún lo afectarán y entrarán en vigencia 14 días después de publicar una actualización en el sitio web. Predeterminado: falso
--rsa-key-sizeSeleccionar tamaño de clave: 4096
--preferred-challengesElegir un desafío: dns | http. Predeterminado http.
--cert-nameNombre del certificado a asignar. Certbot usa este nombre para la limpieza y en las rutas de archivos; no afecta el contenido del certificado en sí. Para ver los nombres de los certificados, ejecute 'certbor certificados'. Al crear un nuevo certificado, especifica el nombre del nuevo certificado. Predeterminado: el primer dominio proporcionado o el nombre de un certificado existente en su sistema para los mismos dominios.
--helpAyuda simple.
--versionMuestra la version del cliente ACME.
Banderas
BanderaDescripción
-d su_dominioLista de dominios separados por comas o espacio, para obtener un certificado. El primer dominio proporcionado será el sujeto CN del certificado y todos los demás dominios serán nombres alternativos de sujeto en el certificado. El primer dominio también se usará en algunas interfaces de usuario de software y como rutas de archivo para el certificado y material relacionado, a menos que se especifique lo contrario o ya tenga un certificado con el mismo nombre. En el caso de una colisión de nombres, agregará un número como 0001 al nombre de la ruta del archivo. (predeterminado: Preguntar)
-vvvAumenta el texto de respuesta (explica mejor)
-m correoIndica el correo asignado a la cuenta ACME.
-hAyuda simple.

1. Ejecutar cliente ACME Certbot

El cliente ACME Certbot que ya debe estar instalado solo corre desde la ventana de comandos y debes hacer algunas comprobaciones primero.

certbot --version
certbot --help
certbot -h all > help_certbot.txt

En Windows debes ejecutar la ventana de comandos (CMD) como administrado (clic derecho ejecutar como administrador).

Estos apuntes fueron basados en Cerbot v1.6.0

Si todo esta bien podemos empezar con el proceso asi:

certbot certonly --manual

Nota que es muy importante que incluyas el comando certonly y la opción --manual para indicar que solo quieres obtener y no instalar (porque lo haremos manualmente) el certificado. El cliente se inicia con una serie de preguntas:

No des Enter antes de completar el desafío ACME

Podrías responder a alguna de estas preguntas de manera antelada por ejemplo:

certbot certonly --manual -d su_dominio -d www.sudominio --preferred-challenges dns --vvv

Aqui estamos definiendo los dominios y que preferimos el tipo de desafío por DNS. Mira las tablas arriba para mas detalles.

2. Desafíos ACME

Antes de que Let's Encrypt le pueda otorgar un certificado, debe validar que usted controla (es propietario) de dicho dominio. A esa tarea de validación le llamamos "desafíos" ACME (challenges). Si Ud tuviera acceso al shell el cliente ACME Certbot estaría instalado en el servidor por lo que podría hacer esta validación automáticamente sin su ayuda. Pero ya que Ud esta leyendo estas lineas el cliente ACME Certbot no se encuentra instalado en el servidor sino en otra computadora con conexión a internet, por lo que nos toca hacer este proceso manualmente.

2.1 DNS

Este desafío le pide que demuestre que controla el DNS de su dominio poniendo un valor específico en un registro tipo TXT debajo de ese nombre de dominio. También le permite emitir certificados comodín. Después de que Let's Encrypt le dé a su cliente ACME un token, su cliente le solicitara crear un registro TXT de nombre _acme-challenge.su_dominio y contenido el token.

certbot certonly --manual --preferred-challenges dns

Puede tener múltiples registros TXT para el mismo nombre. Por ejemplo, esto podría suceder si está validando un desafío para un comodín y un certificado sin comodín al mismo tiempo. Sin embargo, debe asegurarse de limpiar los registros TXT antiguos, porque si el tamaño de la respuesta es demasiado grande, Let's Encrypt comenzará a rechazarlo.

Para comprobar si cumpliste con el desafío puedes usar ToolBox. En la casilla de texto escribe la clave: _acme-challege.su_nominio, luego seleccione la opción: TXT Lookup y dele clic al botón TXT Lookup. Deberas poder comprobar que la respuesta es el <Token> de Let's Encrypt

Ventajas desafío DNS:

Desventajas desafío DNS:

La mayoría de los proveedores de DNS tienen un "tiempo de propagación" que gobierna cuánto tiempo lleva desde el momento en que actualiza un registro DNS hasta que esté disponible en todos sus servidores. Puede ser difícil medir esto porque a menudo también usan anycast, lo que significa que varios servidores pueden tener la misma dirección IP y dependiendo de dónde se encuentre en el mundo, puede hablar con un servidor diferente (y obtener una respuesta diferente) que Let's Encrypt lo hace. Las mejores API de DNS le brindan una forma de verificar automáticamente si la actualización se propaga completamente. Si su proveedor de DNS no tiene esto, solo tiene que configurar su cliente para que espere lo suficiente (a menudo hasta una hora) para asegurarse de que la actualización se propague antes de activar la validación.

2.1.1 Como creo un DNS ?

Para crear una entra DNS desde cPanel debes ir a la sección DOMINIOS y entrar en Zone Editor, clic en ADMINISTAR en el dominio que quieres certificar, "añadir registro" y en nombre debes poner _acme-challenge.su_dominio, tipo: TXT y en registrar copiar el Token dado por Let's Encrypt. Si solicitaste certificado comodín tendrás que crear 2 entras con mismo nombre y Token distintos.

cPanel Zona Editor    cPanel Zona Editor

Recuerda que debes esperar suficiente tiempo para que el servidor DNS propague este dato por todos los servidores antes de continuar o el desafío no se dara por cumplido. Mejor comprobar primero.

2.2 HTTP

Este es el tipo de desafío más comúnmente usado por lo que es el predeterminado en el cliente. Let's Encrypt le da un <Token> a su cliente ACME y Ud debe crear y colocar este archivo en su servidor web en http://su_dominio/.well-known/acme-challenge/<Token>. Ese archivo con el nombre del <Token> (sin extencion), continen una huella digital que es la clave de su cuenta (dado en el desafío).

certbot certonly --manual --preferred-challenges http

Para comprobar si se cumplió con este desafío puede consultar en un navegador la siguiente URL: http://su_dominio/.well-known/acme-challenge/<Token>. Deberás poder comprobar que la respuesta es la huella digital de su cuenta.

Ventajas desafío HTTP:

Desventajas desafío HTTP:

Solo acepta URL "http:" no puede ser "https:" y solo usando los puertos 80. Si su dominio tiene redireccion de IP (tipicamente via .htaccess) el desafío sera desaprobado.

2.2.1 Como creo las carpetas y copio el archivo ?

En la sección ARCHIVOS de cPanel la opción "Administrador de archivos" selecciona la carpeta public_html (www) si se trata de su dominio principal u otra carpeta mas profunda si se trata de otro dominio y debe crear las carpetas .well-known/acme-challenge luego "cargar" el archivo de nombre /<Token> que contiene la huella digital de su cuenta. Recuerde que las carpetas o archivos que tiene un . delante están ocultos a no se que en configuracion este seleccionada la casilla "Mostrar archivos ocultos".

2.3 TLS-SNI

Este desafío se definió en versiones preliminares de ACME. Se trata de una conexion via TLS con protocolo HTTPS el puerto 443, para enviar un encabezado SNI específico con el token. Fue deshabilitado en MAR-2019 porque no era lo suficientemente seguro.

3. Obtener certificados

Una vez que ejecutaste el desafío ya sea DNS o HTTP (puede pedirte mas de uno) es momento de comprobar si Let's Encript te valida el dominio, por lo que es momento de dar Enter en el cliente Certbot (que se encuentra detenido esperado con las instrucciones del desafío mostradas en la consola sea ejecutadas manualmente en su servidor por Ud).

Si Let's Encript encuentra una coincidencia dará el desafío por superado y procede a emitir el certificado. Si no aprueba el desafío le informara del error y tendrá que iniciar la solicitud de un nuevo certificado.

Si el resultado es correcto encontraras un mensaje con los datos del certificado y la carpeta donde se instalaron estos. Ejemplo C:\Certbot\live\tu_dominio\

4. Instalación certificados

Una vez obtenidos los certificados debes instalarlos en tu servidor. Eso lo puedes hacer tu mismo si tienes acceso al panel de control. En cPanel debes entras en la sección SEGURIDAD, luego en la opción SSL/TLS y finamente en la opción Instalar y administrar SSL para sitios (HTTPS).

  1. En la parte inferior veras un selector desplegable que dice Dominio allí debes seleccionar el dominio para el cual creaste el certificado en el paso 2.
  2. Luego debes ubicar el certificado CRT (Ejemplo C:\Certbot\live\tu_dominio\cert.pem) copiar y pegar en el recuadro. Te dará una confirmación de que los ha reconocido. Ver nota 1.
  3. Luego debes ubicar tu llave privada KEY (Ejemplo C:\Certbot\live\tu_dominio\privkey.pem) copiar y pegar en el recuadro. No te dirá nada.
  4. Opcionalmente, procedes con la tercera casilla CABUNDLE (Ejemplo C:\Certbot\live\tu_dominio\chain.pem) copiar y pegar en el recuadro. No te dirá nada. Ver nota 2.
  5. Clic a Instalar certificado
  6. Comprueba si tu_dominio tiene el certificado SSL activo (candadito)
cPanel SSL/TLS    cPanel Administrar SSL

Nota 1. Te confirma --> dominio: tu_dominio, emisor: Let's Encrypt tamaño de clave: 2,048 bits vencimiento: 01-NOV-2020

Nota 2. En la mayoría de los casos, no necesita proporcionar el paquete de CABUNDLE (CA) porque el servidor lo recuperará del repositorio público de Let's Encrypt.

5. Renovar certificados

Renovar el certificado es exactamente igual que obtener uno nuevo, debes aprobar el desafie e instalar el certificado.

certbot certificates
certbot certonly --manual --cert-name tu_certificado

6. Notas finales

Dado que dejar las credenciales de DNS y/o carpeta .well-known/acme-challenge en su servidor web aumenta significativamente el impacto si ese servidor web fuese pirateado, es una muy buena práctica borrar la o las entradas DNS y/o carpeta .well-known/acme-challenge que creaste con Zone Editor y/o el administrador de archivos ya que dejaron de tener utilidad después de emitido el certificado.