Certificate authorities
Connect Let's Encrypt, Google Trust Services, ZeroSSL, SSL.com, Actalis, the PSW Group reseller, or your own internal ACME or REST certificate authority.
A certificate authority entry tells aethercert where to request certificates from. Add one under Manage > Certificate Authorities, then select it when creating a certificate.
You can have as many as you like and mix them freely: a public CA for anything external clients see, an internal CA for everything behind the firewall.
The four types
| Type | What it is | Needs |
|---|---|---|
| Let's Encrypt | Seeded on every organization automatically. | Nothing. |
| ACME CA | Any authority that speaks ACME - other public CAs, or your own ACME server. | A directory URL, and usually an EAB key pair. |
| PSW Group | A commercial reseller, ordered through its own API rather than ACME. | Client ID and secret from your PSW Group console. |
| Internal CA (REST) | An HTTP endpoint that takes a CSR and returns a certificate. Also the type an AD CS connector pairs with. | A base URL, and optionally an API key. |
Only Let's Encrypt is available on the Free plan. Every other type requires Standard or higher.
Public ACME authorities
Selecting a provider preset fills in the correct directory URL, so the only thing you paste is the credential.
| Authority | Directory URL | EAB |
|---|---|---|
| Let's Encrypt | Seeded, nothing to enter | No |
| Let's Encrypt (Staging/Test) | https://acme-staging-v02.api.letsencrypt.org/directory | No |
| Google Trust Services | https://dv.acme-v02.api.pki.goog/directory | Yes |
| Google Trust Services (Staging/Test) | https://dv.acme-v02.test-api.pki.goog/directory | Yes |
| ZeroSSL | https://acme.zerossl.com/v2/DV90 | Yes |
| SSL.com (RSA) | https://acme.ssl.com/sslcom-dv-rsa | Yes |
| SSL.com (ECC) | https://acme.ssl.com/sslcom-dv-ecc | Yes |
| Actalis | https://acme-api.actalis.com/acme/directory | Yes |
| Custom / self-hosted ACME server | Yours | Only if your CA requires one |
What "EAB" means
An external account binding is a key ID and an HMAC key that tie an ACME registration to your existing account at that authority. Most public CAs other than Let's Encrypt refuse a registration without one.
aethercert cannot generate these. They are proof that you control an account at that CA, so they can only come from that CA's own dashboard.
| Authority | Where the EAB pair comes from | Worth knowing |
|---|---|---|
| Google Trust Services | Google Cloud Console: enable the Public Certificate Authority API for the project, then Certificate Manager > Public CA > External account bindings > Create external account key. Copy the Key ID and the Base64 MAC key - the MAC key is shown once. | Supports wildcards and up to 100 SANs per certificate. |
| ZeroSSL | app.zerossl.com under Developer > ACME, Generate under the EAB credentials. | The free tier caps at 100 certificates per ZeroSSL account, not per aethercert organization. |
| SSL.com | The account dashboard's ACME/EAB credentials section. | The RSA and ECC directories are separate authorities and each issues only its own key type. Add both if you need both; the same EAB pair works for each. Set the certificate's key type to match, or issuance is rejected. |
| Actalis | Issued by Actalis on request. | Free certificates cover a single domain plus its www variant. Exceeding that produces an error from Actalis at issuance, so it shows as a failed job rather than a form error. |
To add one: Manage > Certificate Authorities, type ACME CA, pick the provider preset, paste the Key ID into EAB key ID and the HMAC key into EAB HMAC key, name it and save.
Test against staging first
Let's Encrypt's rate limits are generous but not infinite, and they are easy to burn through while getting a deploy target right. Add the staging directory as a second authority and point your test certificates at it. Staging certificates are not publicly trusted, which is exactly what makes them safe to waste.
PSW Group
PSW Group is a commercial reseller. Rather than ACME, aethercert talks to its ordering API: it submits the CSR the agent generated, then polls the order until the certificate is issued.
Setup. Create an application under Configuration > API in the PSW console and
copy its client ID and secret. Sandbox and production are separate systems with
separate credentials - sandbox is test-api.psw-group.de, production is
api.psw-group.de, and a credential from one does not work against the other. In
aethercert, add an authority of type PSW Group, choose the environment (sandbox is the
default), and paste the pair. Name the authority so the environment is obvious from the
list; an order placed against the wrong one is the mistake that naming prevents.
Ordering. A certificate job against a PSW authority shows one extra field, PSW product. The list is fetched live using your credentials, so it reflects what your account can actually buy. Everything else is the same as any other certificate: the agent generates the key and CSR locally, and the key never leaves that host.
After you save. Issuance is not immediate, and that is the main practical difference from ACME.
- aethercert submits the order with the agent's CSR. The certificate's status becomes Validating.
- PSW may require domain validation - by email, HTTP, CNAME, DNS TXT or meta tag, depending on the product - and some products involve manual review.
- The order is polled every three minutes. The certificate's detail sheet shows the order's validation state and counts down to the next poll.
- Once PSW issues, the certificate is deployed and renewal is scheduled as normal.
A certificate sitting at Validating is therefore usually correct behaviour, not a failure. Check the order state before treating it as one.
Every certificate is a real purchase
PSW orders are billable at PSW. A per-agent certificate policy places one order per server, including for every server that joins the group later. Per-agent is also the only mode PSW supports: a shared certificate across several agents would have them overwrite each other's order state. Start in the sandbox and move to production deliberately.
Revocation at PSW is a server-side API call rather than an agent job. A policy set to retire stops a PSW certificate renewing but does not revoke it - do that at PSW.
Internal and private authorities
For certificates that only need to be trusted inside your own organization. A private CA has no public rate limits, and its certificates are not recorded in public certificate transparency logs, so your internal hostnames stay internal.
There are three shapes, depending on what your CA can do.
Your CA speaks ACME
The simplest path, and the one to prefer. Add an authority of type ACME CA, set the
provider to Custom / self-hosted ACME server, and enter the directory URL - for
example https://ca.internal.example/acme/directory. Add an EAB pair only if your CA
requires one; most internal CAs do not. This is what step-ca and most internal PKI
products expose.
Everything else works exactly as with a public authority, DNS-01, HTTP-01 and TLS-ALPN-01 included.
Your CA exposes a signing endpoint
For a CA that does not speak ACME but has an HTTP endpoint that accepts a CSR and returns a signed certificate. Add an authority of type Internal CA (REST) with:
| Field | Value |
|---|---|
| Base URL | For example https://ca.internal.example. |
| Signing path | Defaults to /sign. |
| API key | Only if the endpoint requires one. Stored in Vault, never returned to the browser. |
| Allow self-signed TLS | Tick only if the endpoint is genuinely served with a certificate no client would trust. |
The agent calls the endpoint directly. If you are building one, this is the contract it
has to satisfy - both requests are POST, Content-Type: application/json, with the
API key as Authorization: Bearer <key>:
POST <base_url><signing path> # default /sign
{ "common_name": "app.example.com",
"sans": ["app.example.com"],
"csr_pem": "-----BEGIN CERTIFICATE REQUEST-----\n...",
"template": "WebServer" } # only when a template is selected
200 { "certificate_pem": "...", "chain_pem": "..." } # chain_pem optionalPOST <base_url><revocation path> # default /revoke
{ "serial_number": "0A1B2C..." }Revocation goes by serial number rather than by re-sending the certificate: unlike ACME
there is no standard shape here, and the CA already knows which certificate a serial
maps to. The revocation path is a separate config key (revoke_path) and defaults to
/revoke.
Your CA is Active Directory Certificate Services
AD CS is reached over Windows RPC rather than HTTP, so it needs a component running on the CA host. Create an Internal CA (REST) authority with provision via a CA connector ticked - the base URL and signing path are filled in at pairing rather than typed now - then generate a one-time pairing token from its Connector panel and install the connector on the AD CS server.
The full procedure, including the two CA rights the connector's service account needs, is in The CA connector.
Internal REST authorities ignore domain selection
That type does not use ACME challenges at all, so DNS-01, HTTP-01 and TLS-ALPN-01 do not apply and selecting a domain on the certificate job has no effect on validation. It is also the only type that works with internal domains.
Clients have to trust your CA's root for the resulting certificates to be accepted. Distributing that trust - Group Policy, an MDM profile, a configuration-management module - is outside what aethercert does.
Choosing an authority per certificate
| The certificate is for | Use |
|---|---|
| Anything a browser or external client must trust | A public authority. Let's Encrypt unless you have a reason otherwise. |
| A name whose existence you would rather not publish | An internal CA. Public certificates are recorded in CT logs, hostnames included. |
| An internal-only service where every client already trusts your root | An internal CA. No rate limits, no external dependency. |
| A requirement naming a specific commercial CA | That CA over ACME with EAB, or PSW Group if it is only sold through a reseller. |