Subscribers

Obtaining a certificate

Enrollment paths

Certificates are issued only to identities that have been authorised by manufactAI GmbH PKI operations. Three enrollment paths are offered; all produce the private key on the requester's system. We never generate or see private keys.

ACME recommended

Fully automated issuance and renewal for hosts you control. Any RFC 8555 client works (certbot, acme.sh, Caddy, Traefik, cert-manager, step). Issuance is restricted to the name spaces listed below; requests for other names are refused by the CA.

Directory URLhttps://ca.manufactai.com/acme/acme/directory
Challengeshttp-01, tls-alpn-01, dns-01
Validity30 days by default, 90 days maximum; renew at 2/3 of lifetime
Authorised names*.manufactai.com
# certbot
certbot certonly --standalone --server https://ca.manufactai.com/acme/acme/directory -d api.example.com

# Caddy (Caddyfile) – zero-touch, renews automatically
api.example.com {
    tls { ca https://ca.manufactai.com/acme/acme/directory }
    reverse_proxy localhost:8080
}

# step CLI
step ca certificate api.example.com api.crt api.key --provisioner acme

One-time enrollment token

For systems that cannot answer ACME challenges (batch jobs, appliances, client certificates for mTLS). PKI operations issue a signed single-use token bound to the exact subject and SANs; it expires after 30 minutes.

# on the target system – the key never leaves it
step ca bootstrap --ca-url https://ca.manufactai.com --fingerprint ebe211b90d660f57cc351f1f9d8db0c3eecd23c9cb624cfe02fcfcf9ea3c0a86
step ca certificate client.example.com client.crt client.key --token "$TOKEN"

# keep it renewed; no further token needed
step ca renew --daemon client.crt client.key                # client certificates: renewal over mTLS
step ca renew --daemon --mtls=false server.crt server.key   # server certificates: serverAuth only, so renewal uses an X5C token

Kubernetes via cert-manager

Point a ClusterIssuer at our ACME directory; cert-manager handles issuance and renewal for Ingress resources and workload certificates.

apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata: { name: manufactai-acme }
spec:
  acme:
    server: https://ca.manufactai.com/acme/acme/directory
    caBundle: <base64 of manufactai-chain.pem>
    privateKeySecretRef: { name: manufactai-acme-account }
    solvers: [{ http01: { ingress: { class: traefik } } }]

Certificate profiles

Exactly two end-entity profiles exist. Key usages are kept separate on purpose: a server certificate cannot be used to authenticate as a client, and vice versa.

TLS serverEKU serverAuth · SAN dNSName/IP required · ECDSA P-256 or RSA ≥ 2048 · ≤ 90 days · CDP + AIA present
mTLS clientEKU clientAuth · SAN dNSName or URI · ECDSA P-256 · ≤ 90 days · CDP + AIA present
Not offeredCode signing, S/MIME, dual-purpose server+client certificates, validity beyond 90 days