SSL-certifikaternes maksimale levetid reduceres til 200 dage fra marts 2026. Læs mere →

Sådan virker ACME-protokollen

ACME (Automated Certificate Management Environment) er defineret i RFC 8555 og automatiserer hele certifikatlivscyklussen: kontooprettelse, domænevalidering, certifikatudstedelse og fornyelse. Denne side forklarer protokollens tekniske flow trin for trin.

ACME-protokollens livscyklus

Et ACME-flow har seks faser. Al kommunikation sker over HTTPS med JSON-payloads signeret via JWS (RFC 7515).

1. Directory + newNonce
2. Konto newAccount
3. Ordre newOrder
4. Validering challenge
5. Finalize CSR + signering
6. Certifikat download

1 Directory og Nonce

Før klienten kan sende requests, henter den serverens directory-objekt. Directory indeholder URL'er til alle ACME-endpoints: newNonce, newAccount, newOrder, revokeCert, keyChange og metadata som termsOfService og externalAccountRequired.

Klienten henter derefter en replay-nonce via et HEAD-request til newNonce-URL'en. Noncen inkluderes i JWS-headeren på alle efterfølgende POST-requests for at forhindre replay-angreb. Serveren returnerer en ny nonce i Replay-Nonce-headeren på hvert svar, så klienten altid har en frisk nonce klar.

# Hent directory
GET https://fairssl.dk/acme

{
  "newNonce":    "https://fairssl.dk/acme/v1/new-nonce",
  "newAccount":  "https://fairssl.dk/acme/v1/new-account",
  "newOrder":    "https://fairssl.dk/acme/v1/new-order",
  "keyChange":   "https://fairssl.dk/acme/v1/key-change",
  "revokeCert":  "https://fairssl.dk/acme/v1/revoke-cert",
  "renewalInfo": "https://fairssl.dk/acme/v1/renewal-info",
  "meta": {
    "termsOfService": "https://www.fairssl.dk/en/terms-of-sale/",
    "externalAccountRequired": true
  }
}

# Hent første nonce
HEAD https://fairssl.dk/acme/v1/new-nonce
→ Replay-Nonce: oFvnlFP1wIhRlYS2jTaXbA

renewalInfo i directory. FairSSL ACME-serveren annoncerer ARI (RFC 9773) direkte i directory-objektet. Klienter der understøtter ARI bruger denne URL til at spørge om optimalt fornyelsestidspunkt.

2 Kontooprettelse (newAccount)

ACME-klienten opretter en konto på ACME-serveren ved at sende et newAccount-request. Klienten genererer et asymmetrisk nøglepar (typisk ECDSA P-384 eller RSA 3072+). Den offentlige nøgle sendes til serveren som en JWK (JSON Web Key), og alle efterfølgende requests signeres med den private nøgle via JWS.

Nøglen er kontoens identitet. ACME-serveren svarer med en konto-URL som klienten bruger i alle efterfølgende requests. Hvis nøglen allerede er registreret, returnerer serveren den eksisterende konto.

EAB: External Account Binding

FairSSL og andre kommercielle ACME-servere bruger EAB (RFC 8555 §7.3.4) til at binde ACME-kontoen til en eksisterende kundekonto. Ved kontooprettelse inkluderer klienten et externalAccountBinding-felt med:

  • Key ID (kid): identificerer jeres FairSSL-konto
  • HMAC Key: en delt hemmelighed til at signere bindingen

Begge genereres i FairSSL-portalen under ACME-indstillinger.

Eksempel: newAccount request

POST /acme/new-account
Content-Type: application/jose+json

{
  "protected": "...base64url(header)...",
  "payload": "...base64url({
    "termsOfServiceAgreed": true,
    "contact": ["mailto:admin@example.dk"],
    "externalAccountBinding": {...}
  })...",
  "signature": "...JWS..."
}

Kontonøglen er ikke certifikatnøglen. ACME-kontonøglen bruges til at autentificere requests. Certifikatnøglen genereres separat og sendes i CSR-trinnet (trin 5). Det er to uafhængige nøglepar.

3 Opret ordre (newOrder)

Klienten sender et newOrder-request med en liste af domænenavne (identifiers). Serveren returnerer en ordre med status pending og en liste af authorization-URL'er, en per domænenavn.

// newOrder request payload
{
  "identifiers": [
    { "type": "dns", "value": "example.dk" },
    { "type": "dns", "value": "www.example.dk" }
  ]
}

// Server response
{
  "status": "pending",
  "expires": "2026-03-19T12:00:00Z",
  "authorizations": [
    "https://acme.fairssl.dk/acme/authz/abc123",
    "https://acme.fairssl.dk/acme/authz/def456"
  ],
  "finalize": "https://acme.fairssl.dk/acme/order/xyz/finalize"
}

Ordretilstande

En ordre gennemgår disse tilstande (defineret i RFC 8555 §7.1.6):

pending ready processing valid

pending: venter på valideringer. ready: alle domæner valideret, klar til finalize. processing: CA signerer certifikatet. valid: certifikat klar til download. Ordren kan også gå til invalid (validering fejlet) eller expired (timeout).

4 Domænevalidering (challenges)

For hvert domæne henter klienten en authorization, der indeholder en eller flere challenges. Klienten vælger én challenge-type, besvarer den, og fortæller ACME-serveren at den er klar. CA'en verificerer svaret og markerer authorization som valid.

HTTP-01

Klienten placerer en fil under /.well-known/acme-challenge/ på port 80. CA'en henter filen via HTTP GET.

  • Port 80 skal være åben
  • Ingen redirects tilladt
  • Kan ikke bruges til wildcards
  • Hvert SAN-navn valideres separat

DNS-01

Klienten opretter en TXT-record _acme-challenge.domæne med en SHA-256 hash af token + account key.

  • Ingen åbne porte nødvendige
  • Virker bag firewalls
  • Understøtter wildcards
  • Kan delegeres via CNAME

TLS-ALPN-01

Klienten serverer et selvunderskrevet certifikat med acmeIdentifier-extension på port 443 via ALPN (RFC 8737).

  • Port 443 skal kontrolleres midlertidigt
  • Bruges sjældent i praksis
  • Kan ikke bruges til wildcards

For en detaljeret gennemgang af hver valideringsmetode med eksempler og fejlfinding, se vores guide til ACME-validering: HTTP-01, DNS-01 og TLS-ALPN-01.

5 Finalize: CSR og certifikatsignering

Når alle authorizations er valid, skifter ordren til ready. Klienten sender nu et finalize-request med en CSR (Certificate Signing Request) i DER-format, base64url-encoded.

CSR'en indeholder den offentlige nøgle til certifikatet (ikke account-nøglen) og de ønskede domænenavne som Subject Alternative Names. ACME-serveren verificerer at domænenavnene i CSR'en matcher dem i ordren, videresender til CA'en for signering, og ordren skifter til processing.

// Finalize request
POST /acme/order/xyz/finalize

{
  "csr": "MIIBkTCB...base64url-encoded-DER..."
}

// Server response (order transitions to processing, then valid)
{
  "status": "valid",
  "certificate": "https://acme.fairssl.dk/acme/cert/abc123"
}

Nøglevalg: Vi anbefaler ECDSA P-384 eller RSA 3072 for de fleste miljøer. Undgå RSA 2048: det er den første nøglestørrelse der vil blive blokeret, når kravene strammes.

CSR-domæner skal matche ordren. Hvis CSR'en indeholder et domæne der ikke er i ordren, eller omvendt, afviser serveren med en fejl. De fleste ACME-klienter håndterer dette automatisk.

6 Download certifikatkæden

Når ordren er valid, henter klienten certifikatet fra den URL serveren angav i finalize-svaret. Svaret er en PEM-kæde: leaf-certifikat + intermediate(s). Klienten installerer certifikatet og den tilhørende private nøgle på serveren.

ACME-klienter som simple-acme, Certbot og Lego håndterer hele installationen automatisk: de gemmer certifikat og nøgle, binder til IIS/Nginx/Apache, og restarter services efter behov.

# Certifikatkæden (PEM format)
-----BEGIN CERTIFICATE-----
MIIFjTCCBHWgAwIBAgI...  (leaf: example.dk)
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIEtjCCA56gAwIBAgI...  (intermediate: CA)
-----END CERTIFICATE-----

Hele flowet fra newOrder til certifikat tager typisk under 15 sekunder for DV-certifikater med HTTP-01 eller DNS-01 (forudsat DNS er propageret). For FairSSL ACME med Auto DNS er den typiske tid under 30 sekunder inkl. DNS-propagation.

ACME Renewal Information (ARI)

ARI (RFC 9773) er en udvidelse til ACME der lader CA'en signalere det optimale fornyelsesvindue for hvert certifikat. Uden ARI fornyer klienter baseret på et fast interval (f.eks. "30 dage før udløb"). Med ARI spørger klienten dagligt: "hvornår skal jeg forny dette certifikat?" og CA'en svarer med et præcist vindue.

Hvorfor ARI er kritisk fra 2026

Med kortere certifikatlevetider (200 dage fra marts 2026, 100 dage fra 2027, 47 dage fra 2029) er marginen for fejl minimal. Et fast 30-dages fornyelsesinterval giver kun 17 dages buffer med 47-dages certifikater. Hvis fornyelse fejler flere gange, udløber certifikatet.

Uden ARI

  • Fast fornyelsestidspunkt (klientkonfiguration)
  • CA kan ikke signalere tidlig fornyelse
  • Revokering kræver manuel handling
  • Alle klienter fornyer samtidigt (belastningsspidser)

Med ARI

  • CA bestemmer fornyelsesvinduet dynamisk
  • Revokering udløser omgående fornyelse
  • Nøglekompromittering: CA kan tvinge alle til at fornye
  • Belastningen spredes automatisk (randomiseret inden for vinduet)
# ARI endpoint response
GET /acme/renewal-info/certID

{
  "suggestedWindow": {
    "start": "2026-04-15T00:00:00Z",
    "end":   "2026-04-20T00:00:00Z"
  }
}

Vores vigtigste anbefaling i 2026: brug ikke en ACME-klient uden ARI-understøttelse, hvis du kan undgå det. Simple-acme, Lego og Certbot 3+ understøtter ARI. Se vores ACME-klientoversigt for en komplet sammenligning.

FairSSL Auto DNS: DNS-01 som managed service

DNS-01 er den mest fleksible valideringsmetode, men kræver normalt at ACME-klienten har API-adgang til jeres DNS-udbyder. FairSSL Auto DNS eliminerer dette behov med CNAME-delegation.

Opsætning (engangs)

  1. 1 Opret CNAME-record: _acme-challenge.example.dk CNAME example.dk.acme.fairssl.dk.
  2. 2 ACME-klienten sender valideringsanmodning til FairSSL ACME-serveren
  3. 3 FairSSL opretter TXT-recorden automatisk i vores valideringszone
  4. 4 CA'en følger CNAME-kæden, finder TXT-recorden, og certifikatet udstedes
# Verificér CNAME-opsætning
nslookup -type=CNAME _acme-challenge.example.dk
_acme-challenge.example.dk  canonical name = example.dk.acme.fairssl.dk.

CNAME-recorden opsættes én gang. Derefter håndterer FairSSL al DNS-validering automatisk for alle fremtidige udstedelser og fornyelser. Se Auto DNS-dokumentationen for detaljer.

Overvågning og drift

Automatisering er kun værdifuld, hvis du kan verificere at den virker. FairSSL-portalen giver overblik over alle ACME-administrerede certifikater.

Dashboard

Centralt overblik over alle certifikater: status, udløbsdato, seneste fornyelse og CA. Farvekoder viser om certifikater nærmer sig udløb.

Seneste kontakt

Vi registrerer hvornår hver ACME-klient sidst kontaktede serveren. Hvis en klient ikke har henvendt sig i for lang tid, får du besked.

Udløbsalarmer

Automatiske notifikationer når et certifikat nærmer sig udløb uden at være blevet fornyet. Sikkerhedsnet mod glemt automation.

Ofte stillede spørgsmål om ACME

Find svar på de mest almindelige spørgsmål om SSL certifikater og FairSSL.

HTTP-01 kræver at ACME-klienten placerer en fil på port 80, som CA'en henter. DNS-01 kræver en TXT-record i DNS. DNS-01 er mere fleksibel: den virker bag firewalls, load balancers og for wildcard-certifikater.
EAB knytter din ACME-klient til din FairSSL-konto. Du genererer et EAB Key ID og HMAC Key i FairSSL-portalen og angiver dem ved første kontooprettelse. Herefter er alle certifikatanmodninger fra den klient faktureret til din konto. EAB er defineret i RFC 8555 sektion 7.3.4.
ARI (ACME Renewal Information, RFC 9773) lader CA'en fortælle klienten det optimale fornyelsestidspunkt. Typisk ca. 33% af levetiden før udløb. Med 200-dages certifikater (2026) betyder det fornyelse ca. hver 133. dag. Med 47-dages certifikater (2029) ca. hver 31. dag. Klienten tjekker dagligt og fornyer automatisk.
Ja. Brug DNS-01 challenge med FairSSL Auto DNS. Du opsætter en CNAME-record der peger på vores valideringsserver, og vi håndterer DNS-challenges for dig. Ingen indgående forbindelser til din server.
Begge bruger ACME-protokollen (RFC 8555). Let's Encrypt udsteder kun DV-certifikater fra én CA og kræver ingen konto. FairSSL ACME udsteder fra DigiCert, GlobalSign og Sectigo, understøtter OV/EV (med forudgående validering), og bruger EAB til kontobinding. Se den fulde sammenligning.
ACME-klienter har retry-logik. Hvis serveren er utilgængelig, prøver klienten igen ved næste planlagte kørsel (typisk dagligt). Med ARI aktiveret har klienten et fornyelsesvindue på flere dage, så kortvarig nedetid er uproblematisk. Uden ARI forny med god margin (vi anbefaler minimum 15 dages buffer).
Ja. Wildcards kræver DNS-01 validering (specificeret i RFC 8555). Med FairSSL Auto DNS er opsætningen en enkelt CNAME-record. Bemærk at du skal have to separate valideringer: en for *.example.dk og en for example.dk (apex-domænet dækkes ikke af wildcard).

Kom i gang med SSL-automatisering

Opret en gratis konto og udsted dit første certifikat på under 10 minutter.