TLS Options¶
Finch uses Traefik as its reverse proxy and TLS termination point. Three TLS modes are available, selected at deploy time.
Self-signed (default)¶
No additional flags are needed. Traefik generates a self-signed certificate automatically on first start.
This is the quickest way to get started, but browsers and tools will show a certificate warning because the certificate is not issued by a trusted authority.
For finchctl to connect to a self-signed stack without errors, pass
--tls.skip-verify:
Tip
Self-signed is fine for internal deployments or initial evaluation. Switch to Let's Encrypt or a custom certificate when the stack is externally accessible.
Let's Encrypt¶
Traefik obtains and automatically renews a certificate from Let's Encrypt using the HTTP-01 ACME challenge.
finchctl service deploy \
--service.letsencrypt \
--service.letsencrypt.email admin@example.com \
root@finch.example.com
Requirements:
- Port 80 must be publicly reachable on the server (used for the ACME challenge).
- The hostname passed to
service deploymust resolve to the server's IP address in public DNS. - A valid email address is required for Let's Encrypt account registration and expiry notifications.
Certificate renewal is handled automatically by Traefik. No manual rotation or
service update is needed.
Custom certificate¶
Provide your own certificate and private key files. They are copied to the server's Traefik configuration directory.
finchctl service deploy \
--service.customtls \
--service.customtls.cert /path/to/cert.pem \
--service.customtls.key /path/to/key.pem \
root@finch.example.com
Both files must be PEM-encoded. The certificate file may contain the full chain (server certificate + intermediate CAs).
Updating a custom certificate¶
When a custom certificate expires or is renewed, use service update to push
the new files:
finchctl service update \
--service.customtls \
--service.customtls.cert /path/to/new-cert.pem \
--service.customtls.key /path/to/new-key.pem \
root@finch.example.com
Comparison¶
| Self-signed | Let's Encrypt | Custom | |
|---|---|---|---|
| No extra flags | ✓ | ✗ | ✗ |
| Browser-trusted | ✗ | ✓ | ✓ |
| Auto-renews | - | ✓ | ✗ |
| Public DNS required | ✗ | ✓ | ✗ |
| Port 80 required | ✗ | ✓ | ✗ |
--tls.skip-verify needed |
✓ | ✗ | ✗ |