Skip to main content

Generación de Certificados Específicos

Proceso de Generación para Certificados Específicos

Este documento detalla los pasos para renovar un certificado específico migrando de docker-4 a certificados-1 utilizando ACME.


1. Identificación del Dominio a Migrar

Esta sección corresponde al proceso de migracion del host docker-4. Si ya tiene identificado el dominio, diríjase a la sección dos de este documento.

[docker-4]

  1. En el archivo README, ubicado en /srv/docker-persist/letsencrypt/, buscar alguno de los dominios a migrar.

  2. Consultar la primera entrada disponible con el siguiente comando:

    head -1 README

[pc-personal]

  1. Identificar en qué stack de balanceador se está utilizando el dominio:

    host <nombre-dominio>

    A partir de este punto, [bal] corresponderá a bal-1 o g3-lb-1, según la respuesta obtenida en el comando host.

    Alternativa de Verificación utilizando domain-info.sh

    Como alternativa al uso del comando host para validar la resolución DNS, se puede utilizar el script domain-info.sh en el equipo docker-4. Este script proporciona información más completa acerca del dominio y realiza tanto el paso 3 como el paso 4 en una sola ejecución.

    Comando:

    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 (paso 4).

    • Bloque de certificados: Indica qué archivos .pem está utilizando el dominio.

    Este enfoque permite verificar rápidamente tanto la configuración del dominio como el estado del certificado, simplificando el proceso de migración.

     

[bal]

  1. Buscar en qué archivos se hace referencia al dominio:

    egrep -l <nombre-dominio> *

    Ejecutar en el directorio /etc/nginx/conf.d para verificar posibles colisiones (referencias al dominio en otros archivos de configuración).

  2. Acceder a los archivos de configuración del dominio en:

    vi /etc/nginx/conf.d/<archivo-conf-servicio>

2. Modificación del Archivo de Configuración

[bal]

  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;


    Modificarlo de la siguiente manera:

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

    nginx -t
  3. Reiniciar el servicio en el balanceador (g3-lb o bal-1, donde se este trabajando):

    restart1

3. Verificación de la Configuración

[pc-personal]

  1. Comprobar que el token responde correctamente:

    curl http://<nombre-dominio>/.well-known/acme-challenge/<cadena-aleatoria>
    • Si devuelve un 301, revisar que el bloque location / incluya:

      return 301 https://$host$request_uri;
  2. Acceder a la plataforma de gestión de certificados en:

    http://certificados.psi.unc.edu.ar/
    • Navegar a add cert y agregar el dominio en Main (no es necesario agregar alias, salvo que la pagina tenga www).

[bal]

  1. Validar que el certificado se haya creado correctamente:

    watch ls /opt/certificados-ssl/<nombre-de-dominio>
    (Se deben visualizar los cuatro archivos .pem).

    Problemas en la creación del certificado

    En ocasiones, la creación del certificado puede dar errores en el proceso, sin embargo, estos pueden no ser errores reales.
    Dichos errores son mostrados en la interfaz grafica de certificados.psi.unc.edu.ar

     

        - Error "Balanceador mal configurado": este error se muestra cuando no se han modificado las lineas del include en el archivo de configuración. Para solucionarlo, revisar que dicho cambio haya sido realizado. En caso afirmativo, ejecutar el comando restart1 dado que el problema se debe a un error de sincronización entre los balanceadores. Caso contrario, aplicar la corrección al archivo de configuración. Finalmente, intentar la creación del certificado. 

        - Error "Instalación del certificado": este error se muestra cuando los archivos del certificado no pudieron ser copiados al directorio /opt/certificados-ssl. Para solucionarlo, hacer el borrado manual descrito en la sección subsecuente y luego intentar la creación del certificado nuevamente.

     

    Que hacer si mi certificado no se crea?
    Ingresar a certificados-1.psi

    ssh certificados-1.psi

    Si no tiene permiso para acceder, comunicarse con gguillaumet011@unc.edu.ar o valentin.castellano@unc.edu.ar

    Luego dirigirse al directorio .acme.sh

    cd .acme.sh

    Y eliminar el directorio correspondiente al nombre de dominio

    rm -rf <nombre-de-dominio>_ecc

    Luego, volver a intentar la creación del certificado.


4. Aplicación del Nuevo Certificado

[bal]

  1. 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;
  2. Validar la configuración:

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

    restart1

[pc-personal]

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

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

    IMPORTANTE: En caso de estar trabajando sobre bal-1, antes de ejecutar esta prueba, debe realizarse la seccion siguiente (Eliminacion del Certificado Antiguo)

  2. 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):

    rm -r /etc/letsencrypt/<nombre-dominio>

    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

6. Actualización de Registros en docker-4

[docker-4]

  1. En el archivo README, ubicado en /srv/docker-persist/letsencrypt/, eliminar la línea correspondiente al dominio migrado.

  2. Realizar un commit de los cambios:

    git status   # Verificar los cambios añadidos
    git commit -a -m "Removed <nombre-dominio>"
    git status   # Confirmar el commit realizado

    (El repositorio es solo local, no es necesario hacer push).


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

cd /opt/certificados-ssl
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.