Skip to main content

Migracion Wildcards

Proceso de Migración para Certificados Wildcard

Este documento detalla los pasos para pasar de la utilización de un certificado wildcard a un certificado especifico utilizando ACME.


1. Identificación de Certificados Wildcard a Migrar

[docker-4]

  1. Listar los certificados wildcard utilizados con el siguiente comando:

    acme-freq.sh
  2. Seleccionar uno de los certificados wildcard mostrados en la lista.
    A partir de este punto, [bal] corresponderá a bal-1 o g3-lb-1, según la respuesta obtenida en el comando acme-freq.sh

[bal]

     3. Verificar qué dominios están usando el wildcard seleccionado:

egrep -lr acme.sh/<dominio-del-wildcard> /etc/nginx/conf.d
  1. Guardar la lista de dominios encontrados para iniciar el proceso de migración.

[docker-4]

5. Comprobar la información detallada del dominio:

domain-info.sh <nombre-de-dominio>

Salida del comando (ejemplo):

Existe en bal-1
No existe en /etc/letsencrypt
Existe archivo /etc/nginx/conf.d/monserrat.turnos.unc.edu.ar.conf

Usado en
/etc/nginx/conf.d/monserrat.turnos.unc.edu.ar.conf: server_name monserrat.turnos.unc.edu.ar;
/etc/nginx/conf.d/monserrat.turnos.unc.edu.ar.conf: server_name monserrat.turnos.unc.edu.ar;

Certificados usados
 ssl_certificate /etc/letsencrypt/acme.sh/turnos.unc.edu.ar/fullchain.pem;
 ssl_certificate_key /etc/letsencrypt/acme.sh/turnos.unc.edu.ar/privkey.pem;

Interpretación de la salida:

  • Primera línea: Indica que el dominio resuelve DNS (similar a host).
  • Segunda línea: Muestra si el dominio tiene o no un certificado en /etc/letsencrypt.
  • Tercera línea: Informa si existe un archivo de configuración relacionado en /etc/nginx/conf.d/.
  • Bloque de configuración: Lista los archivos donde se menciona el dominio.
  • Bloque de certificados: Indica qué archivos .pem está utilizando el dominio.

2. Modificación del Archivo de Configuración

[bal]

     6. Editar el archivo de configuración del dominio:

vi /etc/nginx/conf.d/<nombre-de-dominio>.conf
  1. Reemplazar la referencia al archivo well.inc por el nuevo well-known de ACME en los bloques 80/20080 y 443/20443 .

    La nueva ruta a incluir es:

    include /etc/nginx/conf.d/well-acme.inc;

    Si en la configuración existe la instrucción:

    rewrite ^ https://$host$request_uri? permanent;

    Reemplazarla por:

    location / {
      return 301 https://$host$request_uri;
    }

    Si el rewrite redirige a una URL específica, o existe un bloque location con dicha instruccion:

    rewrite ^ https://alguna_url? permanent;

    Por:

    location / {
      return 301 https://alguna_url;
    }
  2. Verificar la integridad del archivo modificado:

    nginx -t
  3. Reiniciar el servicio en el balanceador:

    restart1

3. Verificación de la Configuración

[pc-personal]

10. Comprobar que el token responde correctamente:

curl http://<nombre-dominio>/.well-known/acme-challenge/abc 

Esta prueba debe responder con la cadena de texto "abc" seguida de un token.

  • Si devuelve un 301, revisar que el bloque  location / incluya:
return 301 https://$host$request_uri;

11. Acceder a la plataforma de gestión de certificados en: https://portuno.psi.unc.edu.ar/apps/ (La URL podría cambiar en el futuro).

Navegar a TSL certs -> add -> y agregar el dominio en Main (no es necesario agregar alias, salvo que exista el mismo dominio con www).
Este proceso puede demorar algunos minutos.

[bal]

12. Validar que el certificado se haya creado correctamente:

ls /opt/certificados-ssl/<nombre-de-dominio>

(Se deben visualizar los cuatro archivos .pem).

4. Aplicación del Nuevo Certificado

[bal]

13. Modificar el archivo de configuración del balanceador para utilizar el nuevo certificado desde el repositorio: 

ssl_certificate /opt/certificados-ssl/<nombre-de-dominio>/fullchain.pem; 
ssl_certificate_key /opt/certificados-ssl/<nombre-de-dominio>/privkey.pem; 
  1. Validar la configuración:

    nginx -t
  2. Reiniciar el servicio para aplicar el nuevo certificado:

    restart1

[pc-personal]

16. Verificar que el nuevo certificado esté en uso: 

openssl s_client -connect <nombre-dominio>:443 -showcerts | grep Before

Alternativa en casos con restricciones geográficas: 

curl -v --cert-status https://<nombre-de-dominio>/ 

5. Eliminación del Certificado Antiguo

[bal]

  1. Eliminar el certificado antiguo del repositorio anterior (svn):

     

    Una vez que TODOS los dominios que usaban el certificado wildcard fueron migrados a certificados particulares, podemos eliminar el wildcard.

    rm -rf /etc/letsencrypt/acme.sh/<dominio-wildcard>
    IMPORTANTE: Antes de eliminar, verificar que el certificado ya no esté en uso en /etc/nginx/conf/*

  2. Validar que no haya conflictos en la configuración:

    nginx -t
  3. Aplicar los cambios reiniciando el servicio:

    restart1

Fin del proceso.

Alternativa para la Creación del Certificado

A través de línea de comandos

Dentro de certificados-1, ejecutar:

./cert-create.sh domains=<nombre-de-dominio>

Los certificados generados con ACME se almacenan en .acme.sh, en el home de root.

Procedimiento Manual

acme.sh --issue --stateless -d <nombre-sitio> --ecc
mkdir -p /opt/certificados-ssl/<nombre-de-dominio>
acme.sh --install-cert -d <nombre-de-dominio> \
--cert-file /opt/certificados-ssl/<nombre-de-dominio>/cert.pem \
--key-file /opt/certificados-ssl/<nombre-de-dominio>/privkey.pem \
--fullchain-file /opt/certificados-ssl/<nombre-de-dominio>/fullchain.pem \
--ca-file /opt/certificados-ssl/<nombre-de-dominio>/chain.pem

Commit en el Repositorio

git add .
git commit -m "Agregado certificado para <nombre-de-dominio>"

Actualización en Balanceadores

cd /opt/certificados-ssl
git pull

Sin embargo, todo este procedimiento puede inducir a errores humanos, por lo que se recomienda utilizar la interfaz web, que se encarga de todo este procedimiento.