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]
- Listar los certificados wildcard utilizados con el siguiente comando:
acme-freq.sh
- 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
- 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
-
Reemplazar la referencia al archivo
well.inc
por el nuevowell-known
de ACME en los bloques80/20080
y443/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; }
-
Verificar la integridad del archivo modificado:
nginx -t
-
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).
[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;
-
Validar la configuración:
nginx -t
-
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]
-
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.
IMPORTANTE: Antes de eliminar, verificar que el certificado ya no esté en uso enrm -rf /etc/letsencrypt/acme.sh/<dominio-wildcard>
/etc/nginx/conf/*
-
Validar que no haya conflictos en la configuración:
nginx -t
-
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.