Issuance walkthrough
Every form field on the New Certificate page, what it does, and what happens after you click Submit. Includes key-type guidance, policy enforcement, manual DNS, and CSR upload.
Form fields
| Field | Required | Notes |
|---|---|---|
| Issuer | yes | An ACME account or AD CS profile in the current project. |
| Common name | yes | The primary subject. Must match a registered zone or have an explicit DNS challenge override. |
| SANs | no | No platform limit — your CA imposes one (Let's Encrypt allows 100 identifiers) and exceeding it fails at order time, not at submit. Set san_rules.max_san_count in the certificate policy to enforce a limit locally. Each must also resolve to a zone or override. |
| Key type | yes | ECDSA P-256 / P-384, RSA 2048 / 3072 / 4096. |
| Auto-renew | yes | Default on. Renewal window configurable. |
| Distribution targets | no | List of pre-configured targets to push to on every successful issuance/renewal. |
| Approval required | policy | Forced on by project policy if applicable. |
Choosing a key type
- ECDSA P-256 — the right default. Smallest, fastest handshake, lowest CPU, supported everywhere modern.
- ECDSA P-384 — for higher-assurance use cases. Same wins, larger margin.
- RSA 2048 — when a downstream device only speaks RSA (older F5 partitions, ancient JVMs).
- RSA 3072 / 4096 — only when a compliance regime demands it. Significantly slower TLS handshake.
Policy enforcement
Project policies can restrict the form before submission:
- Allowed issuers (e.g. ban Let's Encrypt staging from the production project).
- Required key types or minimum sizes.
- Required SAN suffixes (every cert must include
*.example.com). - Forbidden CN patterns (no wildcard CNs).
- Mandatory auto-renew.
A request that violates the policy is rejected with HTTP 422 and a structured list of violations — nothing is created and no job is enqueued. There is no per-request override and no admin bypass: change the policy, or change the request.
Bring-your-own CSR — not supported
CertAutoPilot always generates the key pair itself and builds the CSR internally; there is no way to supply your own PKCS#10. If your requirement is that the private key never exists outside a device or HSM, this product cannot satisfy it today — import an externally issued certificate instead, or issue through your device's own enrolment path.
Manual DNS
For zones not delegated to a supported DNS provider — say, a registrar's homepage with no API. CertAutoPilot pauses the job, shows the exact TXT record to publish, and resumes after you click I've added it.
Manual DNS disables auto-renewal automatically (we cannot publish records you have to set by hand). Only use for one-off certs.
HTTP validation
No DNS access at all? Pick HTTP: route the ACME challenge path (/.well-known/acme-challenge/*) on each domain to CertAutoPilot at your edge (gateway / ingress / reverse proxy — CertAutoPilot can stay internal), and the CA validates over port 80 — no zone, no DNS credential, immediate validation, auto-renew fully supported. Wildcards are not possible with HTTP validation. See HTTP validation.
Approval workflow
If approval is required, submitting the form creates a request in Requests rather than starting the issuance job. Approvers receive a notification, review the request (including all preflight warnings), and approve or reject with a comment. Self-approval is blocked.
What happens after submit
-
Worker creates an ACME order (or AD CS enrollment).
-
For ACME with automated DNS, issuance is phased across three jobs, not one.
issue_certificatepublishes the DNS-01 TXT records and hands off — it completing quickly does not mean the certificate was issued. -
await_dns_propagationpolls DNS on its own schedule without holding a worker, up to the propagation deadline (default 30 minutes, configurable 5 minutes–4 hours).finalize_orderthen accepts the challenges, finalises the order and downloads the certificate.Manual DNS, HTTP-01, the sequential RRset-replacing provider rfc2136, and Cloudflare, DigitalOcean, OVH and Plesk use the older single-job synchronous flow instead — those four delete their TXT record from the process that created it, so they cannot use the phased flow's separate cleanup job.
-
Worker stores the certificate and chain, plus the private key envelope-encrypted with a DEK wrapped by the KEK. The certificate and chain themselves are public data and are stored as-is.
-
Distribution targets fire (if configured) — fan-out, dry-run optional.
-
Audit events emitted:
cert.requested,cert.issued,cert.distributed. -
Renewal scheduler picks up the new cert and computes its renewal window.
API
POST /api/v1/projects/{project}/certificates
GET /api/v1/projects/{project}/certificates/{id}
POST /api/v1/projects/{project}/certificates/{id}/renew
POST /api/v1/projects/{project}/certificates/{id}/revoke
GET /api/v1/projects/{project}/certificates/{id}/timeline