Nachdem ich letzte Woche meine Website vom Apache2 auf den nginx-Webserver migriert habe, hatte ich wie immer einmal meine SSL-Parameter auf https://www.ssllabs.com/ssltest/index.html gecheckt:
Als ich meine Zertifikat prüfte fiel mir auf, dass ich keinen DNS CAA Record für meine Domain habe:
Über diesen Typ Record hatte ich vorher noch nie etwas gehört. Also machte ich mich auf die Suche und fand das passende RFC (RFC 6844) von Januar 2013.
Dort wird definiert, dass der Record dafür gedacht ist den Certificate Authorities (CAs) mitzuteilen, welche CA ein Zertifikat für meine Domain ausstellen darf. Damit soll also der Missbrauch mit unautorisierten Zertifikaten eingedämmt werden.
Der CAA-Record ist in den meisten DNS-Servern (z.B. BIND oder PowerDNS) implementiert und sieht wie folgt aus:
CAA <flags> <tag> <value>
flags: Ein vorzeichenloser Integer zwischen 0 – 255
tag: String, definiert welchen Typ von Zertifikat die CA ausstellen darf. Zulässige Typen sind „issue“ (normales Zertifikat) ,“issuewild“ (Wildcard Zertifikat) oder „iodef“ (URL für Missbrauchsmeldungen).
value: String, Name bzw. URL der CA
Hier sind einmal zwei Beispiele:
lnx21.de. CAA 0 issue "letsencrypt.org"
lnx21.de. CAA 0 issuewild "thawte.com"
Mit Hilfe dieser beiden Records ist es Let’s Encrypt erlaubt normale, einfache Zertifikate auszustellen. Thawte hingegen darf Wildcard-Zertifikate ausstellen.
Das ganze klingt also auf den ersten Blick sehr sinnvoll. Leider wird der Record aber noch nicht von allen CAs überprüft bzw. beachtet. Daher ist der Einsatzzweck momentan noch recht begrenzt. Sollten sich aber weitere CAs anschließen, so ist dies denke ich ein sehr wirkungsvolles und zugleich einfaches Mittel gegen den Missbrauch mit Zertifikaten.