Password Safe
Artur Fischer
1. Why do you need this module in IP-Symcon?
By default, IP-Symcon stores variable contents and instance configuration values in the file settings.json (and therefore also in backups). This leads to typical risks:
- Plaintext storage: Passwords/tokens can end up in configuration or variables in clear text.
- Unsafe backups: Backups contain configurations—anyone with access may be able to extract secrets.
- Visibility: Admins/users with Management Console access can view contents.
- Distributed systems: Multiple Symcon instances otherwise require manual secret maintenance.
2. How are these issues solved?
SymconSecrets follows a “zero-knowledge” concept:
- Encryption (AES-128-GCM): Secrets are stored in IP-Symcon only as an encrypted blob (Vault).
- Key isolation: The decryption key is not stored in Symcon. It is stored as
master.keyon the OS file system (e.g., in a protected directory). - Stateless editor: The editor works without saving intermediate values in instance properties. Data is only shown/edited in RAM and is only persisted after “Encrypt & Save” (encrypted).
- Additional system secrets moved out: Secrets that would typically be stored in properties (e.g., sync token, webhook password, per-slave basic-auth passwords) are stored encrypted in a separate file
system.vault(also AES-GCM).
Result: No passwords/tokens in
settings.json, as long as you use the intended “Save … (encrypted)” buttons.
Included Modules
- CredentialStore, PasswordSafe
Version History
-
Stateless / zero-cleartext enforced: No secrets are stored in module properties anymore (so nothing ends up in plaintext in
settings.jsonor backups). Inputs are handled only in UI/RAM and are only persisted after being encrypted. -
New encrypted system storage (
system.vault):
Sync token, the slave WebHook password, and per-slave Basic Auth passwords (stored on the master) are saved encrypted insystem.vault(in addition to the main encryptedVault). -
Master/Slave UI cleaned up:
Token generate/show is Master-only. Slaves only enter + save encrypted. Visibility logic inGetConfigurationForm()was adjusted accordingly. -
Per-slave security settings added:
In the slave list, each slave now has Server label, TLS mode (http/strict/pinned), key provisioning (manual/sync), and optional pinned fingerprint. -
Per-slave Basic Auth password editor on Master:
Separate panel with “Server — URL” selection; password is stored encrypted. The dropdown options are built dynamically fromSlaveURLs. -
Key transport is optional + guarded:
The key can optionally be sent in the sync payload (if configured), but only under safe conditions (e.g., never over plain HTTP). -
Key rotation prepared:
UI support for Rotate Encryption Key (visible on Master/Standalone) was added as the basis for the rotation workflow.