SSL-Zertifikate mit CAA absichern
Wie man per Certification Authority Authorization (CAA) das Ausstellen von SSL-Zertifikaten kontrolliert und die erlaubten Zertifizierungsstellen festlegt
Heutzutage gehört es im Netz quasi schon zum guten Ton, die eigene Webseite mittels SSL-Zertifikaten abzusichern. Ein Quentchen mehr an Sicherheit bringt dabei die so genannte Certification Authority Authorization (CAA) im Nameserver. Damit legen Seitenbetreiber fest, welche Zertifizierungsstellen überhaupt zur Ausstellung von Zertifikaten für ihre Domain befugt sind.
Im Normalfall hat ausschließlich deren Inhaber die Möglichkeit, Zertifikate für eine Webseite zu erstellen. Dieser muss die Inhaberschaft an der Domain beispielsweise über entsprechende DNS-Einträge nachweisen. Dennoch kam es in der Vergangenheit immer wieder vor, dass vereinzelt Zertifikate von Unbefugten über bestimmte Zertifizierungsstellen beantragt wurden.
Das Konzept hinter CAA
Eine Möglichkeit diesem Problem zu begegnen, ist die Verwendung von so genannten CAA-Records im DNS. CAA steht für Certification Authority Authorization und legt fest, welche Zertifizierungsstellen genutzt werden dürfen. Da alle von den Browsern anerkannten CAs diese Einträge mittlerweile berücksichtigen müssen, unterbindet man damit recht effektiv die Nutzung unerwünschter Aussteller.
Eine absolute Sicherheit gewährleistet das jedoch nicht - mit Verfahren wie HTTP Public Key Pinning (HPKP) oder noch besser der Nutzung von D_NS-based Authentication of Named Entities (DANE)_ steuert man die erlaubten Zertifikate noch viel genauer. Hilfreich ist CAA aber beispielsweise für gemeinsam genutzte Domains, da damit die Ausstellung so genannter Wildcard-Zertifikate verboten werden kann. (Siehe an der Stelle beispielsweise auch die Public Suffix List.)
Das Erstellen der Einträge
Um die nötigen Einträge zu erstellen, gilt es zunächst herauszufinden, wer Herausgeber der genutzten SSL-Zertifikate ist. Im Folgenden gehe ich von der Nutzung von Let’s Encrypt aus. Manche Provider und DNS-Anbieter haben einen Assistenten im Programm, mit dem die Einträge einfach erstellt werden. Alternativ bietet sich auch der Record Generator von SSLMate an, der einen durch den Prozess führt und sogar die genutzte Zertifizierungsstelle identifizieren kann. Der Aufbau der Einträge sieht dabei beispielsweise wie folgt aus:
@ IN CAA 0 issue "letsencrypt.org"
@ IN CAA 0 issuewild ";"
@ IN CAA 0 iodef "mailto:deine@mail.adresse"
Diese Einstellung besagt, dass Let’s Encrypt Zertifikate für die Domain selbst und für alle Subdomains darunter erstellen darf (issue “letsencrypt.org”), jedoch keine Wildcard-Zertifikate erlaubt sind (issuewild “;”). Bei Problemen mit der Zertifikatserstellung wird die Zertifizierungsstelle, sofern unterstützt, eine E-Mail verschicken (iodef “mailto:deine@mail.adresse”). Ein weiteres Beispiel ist dieses:
www IN CAA 0 issue "letsencrypt.org"
www IN CAA 0 issue "comodoca.com"
www IN CAA 0 issuewild ";"
Die CAA-Einträge gelten immer für alle Einträge unterhalb des entsprechenden Hostnamens, sofern für diese keine abweichende Einstellung publiziert ist. In obigem Beispiel würde sich die Konfiguration also nur auf die Subdomain www und alle sich darunter befindlichen Subdomains erstrecken, nicht jedoch auf die eigentliche Domain. Ausgestellt dürfen Zertifikate wieder von Let’s Encrypt (issue “letsencrypt.org”) sowie zusätzlich von Comodo (issue “comodoca.com”), denn es sind mehrere issue-Zeilen erlaubt. Wildcard-Zertifikate sind auch in diesem Fall nicht zugelassen (issuewild “;”). Eine Mailadresse für Fehlermeldungen wurde hier nicht hinterlegt, denn das Feld ist optional. Ein drittes Beispiel:
@ IN CAA 0 issue "letsencrypt.org"
@ IN CAA 0 iodef "mailto:deine@mail.adresse"
In diesem Fall dürfen Zertifikate für die Domain und alle Subdomains von Let’s Encrypt ausgestellt werden (issue “letsencrypt.org”). Mangels einer issuewild-Zeile sind sowohl Zertifikate für einzelne Subdomains als auch Wildcard-Zertifikate erlaubt. Hinterlegt ist wiederum eine Mailadresse für mögliche Benachrichtigungen (iodef “mailto:deine@mail.adresse”). Ein letztes Beispiel:
intranet IN CAA 0 issue ";"
intranet IN CAA 0 issuewild "letsencrypt.org"
In diesem Fall dürfen keine Zertifikate für einzelne Hostnamen erstellt werden (issue “;”), sondern ausschließlich Wildcard-Zertifikate von Let’s Encrypt (issuewild “letsencrypt.org”). Der Hostname intranet wäre also in diesem Fall von der Zertifikatserstellung ausgeschlossen, lediglich *.intranet ist zulässig.
Das Ergebnis überprüfen
Ob alles geklappt hat, merkt man spätestens beim nächsten Verlängern des Zertifikats. ;-) Sinnvoll ist jedoch, die Policy schon vorher zu überprüfen, beispielsweise mit einem entsprechenden Online-Tool. CAA ist für mich noch recht neu - über Rückmeldungen, Verbesserungsvorschläge und Hinweise auf Fehler im Beitrag freue ich mich immer!