Skip to main content

Overview

By default, Control Plane issues domain certificates from Let’s Encrypt. A certificate generator replaces that with an ACME certificate authority of your choice, such as a commercial CA that your organization requires. A certificate generator is an org-level resource. It holds the CA’s ACME directory URL, the account credentials, and how ACME challenges are solved. A domain uses it by setting spec.certificateGeneratorLink. Many domains can share one generator.

Configuration

The only supported provider is acme. The provider, server, and challenge type identify the ACME account. To change any of them, create a new certificate generator and point your domains at it.

Challenge types

An http01 generator is rejected on a domain that:
  • uses dnsMode: ns,
  • sets gvcLink (subdomain-based routing needs a wildcard certificate), or
  • sets workloadLink.

HTTP-01

The CA validates the domain by requesting a token over HTTP on the domain itself. No credentials are needed:

DNS-01

The CA validates the domain through a TXT record that Control Plane writes into your DNS zone, using credentials you provide in a secret. Set provider and the matching block:
  • When hostedZoneId or hostedZoneName is omitted, the zone is discovered from the domain name.
  • For route53, if the aws secret sets roleArn, that role is assumed before records are changed.
  • azureDns supports the Azure public cloud only.
Because Control Plane writes the challenge record into your own zone, a CNAME-mode domain using a dns01 generator does not need the _acme-challenge CNAME record that the built-in dns01 challenge requires. When switching a domain from the built-in dns01 challenge to a generator, delete that CNAME record: a TXT record cannot be created at a name that already has a CNAME.

External account binding

Commercial CAs usually issue a key ID and an HMAC key for each ACME account. Store the HMAC key in an opaque secret exactly as the CA issued it (base64url), with encoding plain, and reference it:

Secrets

Every secret a generator references must exist and have the type listed above. Creating or updating a generator requires the use permission on each referenced secret. A secret that a certificate generator references cannot be deleted.

Example

A DNS-01 generator for a commercial CA, with credentials for Route53:
Create it with cpln apply:

Using a generator on a domain

Set certificateGeneratorLink on the domain:
  • The generator defines the challenge type, so the domain must not set certChallengeType.
  • It cannot be combined with tls.serverCertificate.secretLink on any port.
  • It is not supported on internal domains.
  • Linking a generator to a domain requires the use permission on the generator.
  • The generator must exist. A domain that links to a missing generator is rejected.

Status

Once a generator is created, Control Plane registers the ACME account with the CA. The result is reported in status: Check status.ready before linking domains to a new generator.

Deleting

A certificate generator cannot be deleted while a domain references it. Remove certificateGeneratorLink from those domains, or point them at another generator, first. A generator tagged cpln/protected cannot be deleted either.

Permissions

Use certificategenerator as the targetKind in a policy.

Quota

An org can have up to 10 certificate generators by default (certificategenerators quota).