La firma: por qué un sistema no entra si no está firmado
Instalar un sistema es ejecutar código. La firma es lo que decide de quién te fías.
Un sistema no son solo datos. Trae código que corre dentro de tu cuenta y puede leer y escribir en tus tablas. Instalarlo es, literalmente, ejecutar lo que venga en ese archivo.
Por eso cada sistema va firmado, y tu instalación comprueba la firma antes de tocar nada.
Cómo funciona, en corto
Hay dos claves que van juntas:
| Dónde vive | Qué hace | |
|---|---|---|
| Clave privada | Solo en tu máquina | Firma los sistemas. Nunca sale de ahí |
| Clave pública | En cada instalación | Comprueba las firmas. No sirve para firmar |
Tu instalación tiene solo la pública. Puede verificar que un sistema es tuyo, pero no puede fabricar uno nuevo que se lo parezca.
Importante
Que la privada no esté en el servidor es el punto entero. Si alguien comprometiera tu cuenta, no podría instalarse código propio: no tendría con qué firmarlo, y sin firma válida no entra nada.
Qué se firma exactamente
Se firma el sistema completo: las tablas, las reglas, las herramientas y cada archivo de código. Cambiar un solo carácter en cualquiera de ellos rompe la firma.
Eso significa que si alguien intercepta el archivo entre tu máquina y tu cliente y le mete una línea, la instalación lo rechaza.
Las dos variables, y dónde va cada una
Esto es lo que hay que dejar bien puesto una vez:
| Variable | Dónde | Para qué |
|---|---|---|
SISTEMAS_FIRMA_PUBLICA |
En todas las instalaciones | Comprobar firmas. Sin ella no entra ningún sistema |
SISTEMAS_FIRMA_PRIVADA |
Solo donde construyes los sistemas | Firmarlos. Es la máquina de quien los publica |
Importante
La privada nunca va en el servidor de un cliente. Quien entrara ahí podría firmarse sus propios sistemas y meterle código a esa cuenta — que es justo lo que la firma existe para impedir.
La comprobación falla cerrada: sin clave pública no se instala nada. No es un aviso que puedas saltarte.
Consejo
Si montas una instalación nueva y todos los sistemas fallan al instalarse,
empieza por ahí: casi siempre falta SISTEMAS_FIRMA_PUBLICA.
Crear tus claves
La primera vez, desde tu máquina:
node scripts/firmar-sistema.mjs claves
Te genera el par. La privada queda en tu máquina —por defecto en
~/.runop/firma-sistemas.pem— y la pública es la que repartes.
Las dos variables van en base64, en una sola línea. El PEM crudo tiene saltos de línea y se rompe al pasar por el entorno:
base64 -i ~/.runop/firma-sistemas.pem | tr -d '\n'
Con la privada puesta, el export sale firmado solo
Si en tu máquina está SISTEMAS_FIRMA_PRIVADA, exportar un sistema desde la
pantalla de Sistemas ya te lo da firmado, listo para instalar en la cuenta
de cualquier cliente. No hay paso manual.
Si no está puesta, el archivo sale sin firma y hay que firmarlo aparte:
node scripts/firmar-sistema.mjs firmar mi-sistema.json ~/.runop/firma-sistemas.pem
Y para comprobarlo antes de mandárselo a nadie:
node scripts/firmar-sistema.mjs comprobar mi-sistema.json
Consejo
comprobar necesita la clave pública: la toma de SISTEMAS_FIRMA_PUBLICA o
se la pasas como segundo argumento.
Cambiar un sistema invalida su firma
La firma cubre el contenido. En cuanto tocas la definición —subes la versión, añades un campo— deja de valer, porque ya no es lo que se firmó.
El sistema lo detecta y descarta la firma vieja en vez de arrastrarla, así que el archivo que exportes sale sin firma y lo notas ahí mismo. Con la clave privada puesta ni te enteras: se vuelve a firmar sola.
Importante
Si exportas sin la clave privada configurada, revisa que el archivo lleve firma antes de mandarlo. Si no, el cliente recibirá «La firma no cuadra con el contenido» al instalarlo, y el error aparece lejos de donde se causó.
Cuida la clave privada
Importante
Quien tenga tu clave privada puede instalar código en la cuenta de cualquier cliente tuyo que confíe en tu clave pública. No la subas a un repositorio, no la mandes por chat y no la guardes en el servidor.
Si crees que se filtró: genera un par nuevo, actualiza
SISTEMAS_FIRMA_PUBLICA en todas tus instalaciones y vuelve a firmar tus
sistemas con la clave nueva. A partir de ese momento, lo firmado con la vieja
deja de entrar.
Y guárdala donde no se pierda: sin ella no puedes firmar versiones nuevas de tus propios sistemas.