ACME (Let's Encrypt)
Issue and auto-renew public TLS certificates via any RFC 8555 ACME provider: Let's Encrypt, ZeroSSL, BuyPass, Google Trust Services, or an enterprise ACME server. ScaiVault is the ACME client — you configure it once and it handles challenges, ordering, and renewal.
Base path: /v1/pki/acme/
Pick a provider#
| Provider | Notes |
|---|---|
letsencrypt |
Free, widely supported. Rate limits apply — see https://letsencrypt.org/docs/rate-limits/. |
zerossl |
Free tier, 90-day certs. |
buypass |
Free 180-day certs. |
google |
Google Trust Services. Requires GCP account setup. |
custom |
Any RFC 8555 endpoint. Provide directory_url. |
Each provider has a production and staging environment. Use staging during development — its rate limits are looser and its certs aren't trusted, so you won't burn through your production quota.
Register an ACME account#
1 2 3 4 5 6 7 8 9 | |
1 2 3 4 5 6 7 8 9 10 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 | |
Response:
1 2 3 4 5 6 7 8 | |
ScaiVault generates an account key during registration and stores it internally; you don't see or handle it.
How it works#
Pick a challenge type#
Three options, for three situations.
| Challenge | When to use | What ScaiVault needs |
|---|---|---|
http-01 |
The domain points at a host you control, reachable on port 80. | ScaiVault serves /.well-known/acme-challenge/<token> — route that path to it. |
dns-01 |
Wildcards (*.acme.example), or the host isn't web-reachable on port 80. |
A DNS provider configured in ScaiVault (Route 53, Cloudflare, Google DNS, and others). |
tls-alpn-01 |
Port 80 isn't available. You control port 443. | ScaiVault answers ACME on the TLS-ALPN-01 protocol on port 443. |
DNS-01 is the most reliable — it doesn't care about network topology and supports wildcards. Configure a DNS provider once (see the admin UI under PKI → DNS Providers) and use dns-01 for everything.
Issue a certificate#
1 2 3 4 5 6 7 8 9 | |
1 2 3 4 5 6 7 8 9 10 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 | |
Response while the order is in progress:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | |
Poll order status:
1 2 | |
When complete:
1 2 3 4 5 6 7 | |
Fetch the certificate PEM the same way as any issued cert:
1 2 | |
Wildcard certificates#
Require dns-01. Most providers don't accept HTTP-01 for wildcards.
1 2 3 4 5 6 7 8 9 | |
DNS providers#
ScaiVault writes the DNS TXT challenge record via an integrated DNS provider. Configure the provider once:
1 2 3 4 5 6 7 8 9 10 11 12 | |
Credentials are themselves references to ScaiVault secrets — they don't go in the DNS provider body directly.
Supported providers include AWS Route 53, Cloudflare, Google Cloud DNS, Azure DNS, DigitalOcean, Hetzner, and RFC 2136 dynamic DNS. Provider-specific config keys vary; check the admin UI or DNS Providers Reference.
Auto-renewal#
When auto_renew: true (default), ScaiVault re-runs the ACME flow ~30 days before not_after. Behaviors:
- Re-uses the same account.
- Same domains, same challenge type.
- New certificate becomes a new version of the same "managed certificate" object.
certificate.renewedevent fires on success.certificate.renewal_failedfires on failure, with retries on exponential backoff.
To renew early (before the 30-day window), force it:
1 2 | |
List ACME accounts and orders#
1 2 | |
Filter orders by status: pending, valid, invalid, deactivated, revoked, expired.
Revoke#
ACME-issued certs can be revoked via ACME (preferred) or the standard revocation endpoint:
1 2 3 4 | |
use_acme: true routes the revocation through the ACME server. Without it, ScaiVault only marks the cert revoked in its own store.
Rate limit awareness#
Let's Encrypt rate limits (subject to change):
- 50 certificates per registered domain per week
- 5 duplicate certificates per week
- 300 pending authorizations per account
If you hit them you get backend_rate_limited from ScaiVault. Use staging for development and CI.
What's next#
- PKI Certificates — internal CA and CSR workflows.
- Events and Webhooks — listen for
certificate.renewed,certificate.expiring. - PKI Reference — all endpoints.