Zum Inhalt

ACME im Detail · 18.4

CAA-Records

Dieser Abschnitt ist DNS-Hintergrund. TLSPilot erstellt und prüft keine CAA-Records, aber ein unpassender CAA-Record führt dazu, dass die CA das Zertifikat verweigert, und TLSPilot zeigt dann den Fehler der CA. Mit CAA (Certification Authority Authorization, RFC 8659) legt der Inhaber einer Domain im DNS fest, welche CAs Zertifikate für sie ausstellen dürfen. Jede öffentliche CA prüft CAA vor der Ausstellung. Existiert kein CAA-Record, darf jede CA ausstellen.

Ein CAA-Record hat die Form CAA <flags> <tag> <value>. Die Flags sind meist 0. Der Wert 128 markiert den Record als kritisch: Eine CA, die das Tag nicht versteht, darf nicht ausstellen. Die CA sucht CAA-Records zuerst beim Namen im Zertifikat, dann bei jeder übergeordneten Domain, und verwendet die ersten Records, die sie findet. Ein Record auf example.com gilt deshalb auch für www.example.com, sofern die Subdomain keine eigenen CAA-Records hat. Die CA prüft jeden Namen im Zertifikat; ein einziger eingeschränkter Name blockiert also das ganze Zertifikat.

CAA-Tags und ACME-Parameter
Tag oder ParameterBedeutung
Tags (RFC 8659)
issueErlaubt der genannten CA, Zertifikate für die Domain und ihre Subdomains auszustellen. Gilt auch für Wildcard-Zertifikate, solange kein issuewild-Record existiert. issue ";" erlaubt keine CA.
issuewildNur für Wildcard-Zertifikate (*.example.com). Ist er vorhanden, ersetzt er issue für Wildcards.
iodefAdresse für Berichte über Anfragen, die gegen die CAA-Records verstossen, als mailto:- oder https:-URL. Nicht jede CA verschickt solche Berichte; Google Trust Services zum Beispiel reagiert nicht auf iodef.
ACME-Parameter (RFC 8657), mit ; an den CA-Namen angehängt
accounturiNur dieses ACME-Konto darf Zertifikate bestellen. Bei Let’s Encrypt sieht die Konto-URL so aus: https://acme-v02.api.letsencrypt.org/acme/acct/1234567890.
validationmethodsNur diese Challenge-Typen dürfen verwendet werden, zum Beispiel dns-01, http-01 oder tls-alpn-01.

Beispiel-Records

In diesem Beispiel dürfen Let’s Encrypt (letsencrypt.org) und Google Trust Services (pki.goog) für example.com und seine Subdomains ausstellen. Wildcard-Zertifikate dürfen nur von Let’s Encrypt mit DNS-01 kommen, und Berichte gehen an das Security-Team:

example.com.  CAA 0 issue     "letsencrypt.org"
example.com.  CAA 0 issue     "pki.goog"
example.com.  CAA 0 issuewild "letsencrypt.org;validationmethods=dns-01"
example.com.  CAA 0 iodef     "mailto:security@example.com"

Um Let’s Encrypt an das ACME-Konto von TLSPilot zu binden, ergänzen Sie die Konto-URL: example.com. CAA 0 issue "letsencrypt.org;accounturi=https://acme-v02.api.letsencrypt.org/acme/acct/1234567890".

Typische Fehler

  • CNAME-Kette: CAA-Abfragen folgen CNAME-Records wie jede DNS-Abfrage. Ist www.example.com ein CNAME auf einen Namen eines CDN- oder Hosting-Providers, gelten die CAA-Records bei diesem Ziel. Hat das Ziel keine, fährt die CA mit den übergeordneten Domains Ihres eigenen Namens fort, zum Beispiel example.com.
  • Wildcard: Ein Zertifikat für *.example.com schlägt fehl, obwohl issue die CA erlaubt, weil ein issuewild-Record sie nicht nennt, zum Beispiel issuewild ";".
  • ACME-Parameter: Mit accounturi muss der Record das aktuelle ACME-Konto nennen; nach Reset Account registriert TLSPilot ein neues Konto. Mit validationmethods muss der Challenge-Typ des Zertifikats aufgeführt sein.
  • DNS-Fehler: Schlägt die CAA-Abfrage fehl, zum Beispiel mit SERVFAIL oder einem Timeout, kann die CA nicht feststellen, ob sie ausstellen darf, und verweigert in der Regel. Häufige Ursachen sind eine fehlerhafte DNSSEC-Signatur oder Nameserver, die Abfragen nach unbekannten Record-Typen nicht korrekt beantworten.

Records prüfen

dig +short CAA example.com
dig @8.8.8.8 CAA www.example.com

Eine leere Antwort bedeutet, dass genau unter diesem Namen kein CAA-Record existiert. Prüfen Sie dann auch die übergeordneten Domains.