Documentación Completa: Automatización de Certificados en Home Assistant
📌 Propósito
Automatizar la renovación y gestión de certificados SSL del router ASUS TUF GAMING AX4200 en Home Assistant, incluyendo:
Verificación de fecha de expiración
Reinicio de home assistant
🔧 Configuración Requerida
1. Entidades Necesarias
yaml
input_datetime:
data_certpem:
name: "Fecha Expiración Certificado"
has_date: true
has_time: true
icon: mdi:certificate
En integraciones se tuvo que instalar unas integraciones. Una es Advanced SSH & Web Terminal que se puede instalar directamente desde modulos. En hacs SSH esta fue por motivos que no fui capaz de conectarme mediante shell_command por ssh con el router. Aqui despues hay que añadir integración añadiendo la conexión por ssh, para después poder mandar comandos, y tambien añadimos aquí la integración fecha y hora para poder tener en donde comparar la fecha que obtengamos del certificado del router.
2. Shell Commands (configuration.yaml)
yaml
shell_command:
guardar_privkey: /bin/bash /config/scripts/update_key.sh "{{ contenido }}"
guardar_cert: /bin/bash /config/scripts/update_cert.sh "{{ contenid }}"
3. Scripts (/config/scripts/)
update_key.sh:
bash
#!/bin/bash echo -e "$1" > /config/ssl/privkey.pem
update_cert.sh:
bash
#!/bin/bash echo -e "$1" > /config/ssl/fullchain.pem
⚙️ Automatización Completa
yaml
alias: Actualización Inteligente de Certificados
description: Solo actualiza si el router tiene certificados más recientes
triggers:
- trigger: time_pattern
hours: /1
conditions:
- condition: template
value_template: |-
{% set cert_str = states('input_datetime.data_certpem') %}
{% set cert_dt = strptime(cert_str, '%Y-%m-%d %H:%M:%S') %}
{% set cert_ts = as_timestamp(cert_dt) %}
{% set now_ts = as_timestamp(now()) %}
{{ cert_ts < now_ts }}
actions:
- sequence:
- action: ssh.execute_command
metadata: {}
data:
command: openssl x509 -in /etc/cert.pem -noout -enddate
target:
device_id: tudispositivo
response_variable: clave
enabled: true
- variables:
fecha_raw: "{{ clave.results[0].stdout[0].split('=')[1] }}"
fecha_iso: >-
{{ strptime(fecha_raw, "%b %d %H:%M:%S %Y
%Z").strftime('%Y-%m-%dT%H:%M:%S') }}
enabled: true
- data:
entity_id: input_datetime.data_certpem
datetime: "{{ fecha_iso }}"
action: input_datetime.set_datetime
enabled: true
- action: ssh.execute_command
metadata: {}
data:
command: cat /etc/key.pem
target:
device_id: tudispositivo
response_variable: key
enabled: true
- action: shell_command.guardar_privkey
metadata: {}
data:
contenido: "{{ key.results[0].stdout | join(' ') }}"
enabled: true
- action: ssh.execute_command
metadata: {}
data:
command: cat /etc/cert.pem
target:
device_id: tudispositivo
response_variable: cert
enabled: true
- action: shell_command.guardar_cert
metadata: {}
data:
contenid: |-
{{ cert.results[0].stdout | join('
') }}
enabled: true
- data:
title: Certificados actualizados
message: Los certificados del router ASUS han sido guardados correctamente.
action: persistent_notification.create
enabled: true
- action: homeassistant.restart
data: {}
enabled: true
enabled: true
mode: single🔍 Flujo de Trabajo
Verificación Horaria: Comprueba cada hora si el certificado expira
Condición para que se ejecute: Aquí es donde se compara el input_data creado con ya la fecha incluida del certificado con el sensor que hemos añadido de fecha y hora (para saber la fecha y hora real) y solo cumplirá la condición cuando el input_data haya expirado.
Extracción Segura: Usa OpenSSL para obtener la fecha real de expiración, y introducimos la nueva fecha en el input_ data creado
Copia : Sobre escribe los ficheros de la carpeta SSL
Notificación: Notificación persistente como que se haejecutado el script
Reinicio: reinicia el sistema
⚠️ Requisitos Previos
Integración SSH: Configurada y funcionando
Permisos:
bash
chmod +x /config/scripts/update_*.sh
chown homeassistant /config/ssl/*
Estructura de Directorios:
text
/config/ ├── scripts/ │ ├── update_key.sh │ └── update_cert.sh └── ssl/ ├── privkey.pem └── fullchain.pem
📅 Programación Recomendada
Frecuencia |
Uso Típico |
Patrón |
|---|---|---|
Cada 1 hora |
Entornos críticos |
|
Cada 6 horas |
Balanceado |
|
Cada 24 horas |
Bajo riesgo |
|
🛠 Solución de Problemas
Error en SSH:
bash
journalctl -u homeassistant | grep "SSH"
Verificar Certificados:
bash
openssl x509 -in /config/ssl/fullchain.pem -noout -text
Logs de Automatización:
bash
grep "Gestión Automática" /config/home-assistant.log
🔄 Actualizaciones Futuras
Notificaciones Push: Añadir notificaciones móviles
Backup Automático: Copia de seguridad de certificados antiguos
Integración con Let's Encrypt: Renovación automática completa
Esta documentación cubre todos los aspectos de tu automatización de certificados. Guárdala como referencia en tus archivos de configuración.