CA-Pinning / Certification Authority Authorization
Certification Authority Authorization (CAA) ist ein Verfahren, beim dem der Domain-Inhaber im DNS festlegen kann, welche Zertifizierungsstellen (Certification Authority, CA) für seine Domain Zertifikate ausstellen dürfen und für die Validierung zuständig sind.
Das allgemein als CA-Pinning bezeichnete Verfahren trägt offiziell die Bezeichnung Certification Authority Authorization, welches im RFC 6844 dokumentiert ist. Gelegentlich findet man auch die Bezeichnungen Certificate Pinning und SSL-Pinning.
Beim CA-Pinning wird ein Zertifikat nicht nur an einen bestimmten Host, sondern auch an eine bestimmte Zertifizierungsstelle gebunden.
Warum CA-Pinning?
Das ursprüngliche CA-Modell von SSL bzw. TLS erlaubt es, dass jede Zertifizierungsstelle für jeden Host- oder Domain-Namen ein Zertifikat ausstellen darf. Das bedeutet, dass es mehrere Zertifikate von unterschiedlichen Zertifizierungsstellen für den gleichen Host- bzw. Domain-Namen geben kann. Beispielsweise kann sich ein Angreifer für einen Man-in-the-Middle-Angriff ein gültiges Zertifikat ausstellen lassen, obwohl er nicht der Inhaber der Domain oder des Hosts ist. Der Angreifer könnte sich dann mit dem "gefälschten" Zertifikat als Server ausgeben, der er gar nicht ist (Identitätsdiebstahl) und sogar eine verschlüsselte Verbindung zwischen Client und Server übernehmen.
Wenn jetzt ein Zertifikat eines bestimmten Hosts an eine bestimmte Zertifizierungsstelle gebunden ist, dann fällt bei der Zertifikatsprüfung auf, dass das Zertifikat von einer fremden Zertifizierungsstelle unterschrieben ist. In dem Fall muss das Zertifikat als ungültig angesehen werden.
Wie funktioniert CA-Pinning?
Nach dem der Client das Zertifikat des Servers erhalten hat, muss der Client das Zertifikat gegen vertrauenswürdige Validierungsdaten des Servers überprüfen. Standardmäßig ist das zuerst der eigene Zertifikate-Speicher oder der des Betriebssystems. Normalerweise würde der Client im nächsten Schritt die CA befragen, die für das Zertifikat zuständig ist. Nun ist aber eine Schwachstelle des CA-Modells, das jede CA für jeden beliebigen Host bzw. Domain ein Zertifikat ausstellen darf.
An der Stelle kommt nun das CA-Pinning zum Einsatz, bei dem zuerst festgestellt wird, von wem ein Zertifikat für diese Domain ausgestellt werden darf. Dazu hat der Client bei der Namensauflösung durch DNS den TLSA-Record erhalten, in dem verzeichnet ist, von wem Zertifikate für dies Domain ausgestellt werden darf. Hat der Client diese Information noch nicht, kann er diese Information durch eine erneute DNS-Anfrage ermitteln.
Sofern das Zertifikat durch die richtige Zertifizierungsstelle ausgestellt wurde, kann diese CA auf Gültigkeit des Zertifikats befragt werden. Versucht sich eine Gegenstelle als der richtige Server auszuweisen und präsentiert dazu ein Zertifikat, das eine andere CA unterschrieben hat, weiß der Browser, dass da etwas schief läuft und schlägt Alarm.
Wie sicher ist CA-Pinning?
CA-Pinning ersetzt nicht die Zertifikats-Validierung von SSL bzw. TLS, sondern ist ein zusätzlicher Teil der Validierung, um die Vertrauenswürdigkeit eines Zertifikats zu erhöhen.
Mechanismen wie CA-Pinning erhöhen die Vertrauenswürdigkeit von Zertifikaten, sind allerdings noch nicht weit genug verbreitet, um einen effektiven Schutz zu bieten.