TLS
TLS operations
Status: SUPPORTED for replacing server.tls.cert_file / key_file and restarting. ACME = NOT_VERIFIED / not Community.
Purpose
Terminate TLS on the Manager listener using files referenced in YAML, rotate them, and know what is not a certified ACME product.
Prerequisites
server.tls.enabled: true(example)server.tls.cert_fileandserver.tls.key_filereadable by the Manager user (zwall-manageron the Enterprise unit)- For the helper script:
openssl
Configuration
Scroll sideways to see the full table. Use the arrow keys when focused.
| Key | Type | Notes |
|---|---|---|
server.tls.enabled | bool | if true, cert and key are required |
server.tls.cert_file | path | example /etc/ssl/certs/manager.crt; script default dir /etc/zcs/certs/manager.crt |
server.tls.key_file | path | secret; mode 640 in the generator |
| mTLS nested keys | Enterprise | Agent client certs when security_level maximum; not a public mTLS product cookbook |
Cookie issuance on Enterprise login can require HTTPS (Secure HTTPS session required). CLI login uses Bearer JWT and is not the browser cookie path.
Procedure — generate a lab/internal certificate
scripts/generate_tls_certs.sh:
sudo ./scripts/generate_tls_certs.sh -d /etc/zcs/certs -h manager.example.com -o 365 --self-signedVerified behavior:
- Default dir
/etc/zcs/certs, hostmanager.local, days365 - RSA 4096, SHA-384, SAN DNS=
HOST+localhost, IP127.0.0.1 - Writes
manager.key/manager.crt - Refuses to overwrite an existing
manager.key --real/--skip-genskips generation and tells you to place files yourself
This is not a public CA. Browsers will warn. Use an organization CA or a publicly trusted certificate in production.
Point YAML at the files, ensure the Manager user can read the key, restart Manager.
Procedure — rotate files
- Install new
cert+keybeside or over the configured paths (respect overwrite refusal of the helper). sudo systemctl restart zwall-manager(HUP is not certified to re-read TLS files).- Verify:
curl -fsS https://MANAGER_HOST:8443/health/live
# or openssl s_client -connect MANAGER_HOST:8443 </dev/nullCommunity installation guide mentions GET /cert/status. Enterprise admin GET /cert/status is authenticated. POST /cert/renew is admin-authenticated and is not Community ACME.
ACME (Enterprise only)
Enterprise contains HTTP-01 and Cloudflare DNS-01 configuration under letsencrypt.*. Community does not ship product ACME.
Status: not a certified customer ACME matrix. Do not document Auto ACME for arbitrary DNS providers. Do not document Let’s Encrypt staging as a production trust path (letsencrypt.use_staging).
If you use an external reverse proxy, keep server.trusted_client_ip off unless you terminate TLS on loopback and set exact /32 or /128 proxy CIDRs with max_hops: 1.
Verification
GET /health/liveover HTTPS succeeds with a client that trusts the cert- Browser
/logindoes not fail withSecure HTTPS session requiredwhen you intend cookie sessions zwallctl login --manager-url https://MANAGER_HOST:8443works (Bearer path)
Failure modes
Scroll sideways to see the full table. Use the arrow keys when focused.
| Symptom | Meaning | Action |
|---|---|---|
| Manager fails to start | missing cert/key while enabled | paths + permissions for zwall-manager |
generate_tls_certs.sh exits on existing key | overwrite guard | rotate with new filenames or move the old key |
| clients reject cert | hostname not in SAN | regenerate with -h matching the URL |
| HTTP 400 Secure HTTPS session required | cookie policy | use HTTPS; CLI still uses JWT |
Agent verify_tls: true fails | Agent does not trust Manager CA | server.custom_ca_path / trust_mode on the Agent — do not set allow_insecure_remote_tls except break-glass |
Security considerations
- Product-enforced: TLS can be enabled and required for cookie issuance.
- Operator recommendation: trusted certificates, restricted
ReadWritePaths, no world-readable keys. - Not certified: ACME matrix, mTLS as a marketed product, split-mode plus external proxy as a hardened standard.
Limitations
Listen port vs zwallctl 8080 is a known mismatch. Certificate directory /etc/zcs/certs vs unit paths is a known prefix inconsistency. ACME is not certified.