Warum nicht selbstsignierte Zertifikate über DNS-Record anstelle von letsencrypt validieren?

16

Ich habe mich nur gefragt. Wir verwenden viele SSL-Zertifikate. Heutzutage verwenden wir fast ausschließlich letsencrypt (danke!). Das Endergebnis dieser Zertifikate ist, dass der Eigentumsnachweis für den Domainnamen auf dem Zertifikat von der Befugnis stammt, entweder die DNS-Einträge oder die Website unter diesen Domains zu manipulieren. Der DNS-Nachweis erfolgt durch Hinzufügen eines Schlüssels (von letsencrypt) als TXT-Eintrag zum DNS.

Wenn es also ausreichend ist, die DNS-Einträge für eine Domain zu ändern, warum nicht selbstsignierte Zertifikate mit dem Fingerabdruck im DNS verwenden?

Ich würde sagen, dies gibt genau die gleiche Menge an Vertrauen wie das DNS-basierte Verfahren von letsencrypt (und anderen Zertifizierungsstellen):

  1. Erstellen Sie eine selbstsignierte Zertifizierungsstelle (befolgen Sie einfach die Schritte der verschiedenen Vorgehensweisen)
  2. Erstellen Sie ein Zertifikat für einige Domain (s)
  3. Signieren Sie das Zertifikat aus Schritt 2 mit der Zertifizierungsstelle aus Schritt 1. Sie haben jetzt ein Basiszertifikat, das von einer nicht vertrauenswürdigen Zertifizierungsstelle signiert wurde
  4. Fügen Sie dem DNS jeder Domäne einen TXT-Eintrag (oder einen dedizierten Eintrag) hinzu, der besagt: Wir haben das Zertifikat dieser Domäne mit dieser Zertifizierungsstelle signiert. Wie: 'CA = -fingerpint von CA-'
  5. Ein Browser lädt das Zertifikat herunter und überprüft es, indem er den Fingerabdruck der Zertifizierungsstelle / des Zertifizierungsstellenzertifikats mit den Daten im DNS für die angegebene Domäne vergleicht.

Dies würde es ermöglichen, vertrauenswürdige selbstsignierte Zertifikate ohne Eingriffe Dritter mit demselben Vertrauensniveau wie jedes grundlegende SSL-Zertifikat zu erstellen. Solange Sie Zugriff auf das DNS haben, ist Ihr Zertifikat gültig. Man könnte sogar eine DNSSEC-ähnliche Verschlüsselung hinzufügen, um einen Hash aus der CA und dem SOA-Datensatz zu erstellen, um sicherzustellen, dass die Vertrauenswürdigkeit bei Änderungen im DNS-Datensatz verschwindet.

Wurde dies schon einmal in Betracht gezogen?

Jelmer

Jelmer Jellema
quelle
3
Relevant: tools.ietf.org/html/rfc6698
Håkan Lindqvist
Vielen Dank, Håkan! Durch ein Update habe ich den Begriff DANE für diesen RFC gefunden. Letzte Version des RFC: tools.ietf.org/html/rfc7671 Siehe auch: en.wikipedia.org/wiki/… (Ich werde es später lesen).
Jelmer Jellema
2
Das "Warum nicht" wird auch im verlinkten RFC Håkan behandelt: Ohne DNSSEC wird die Zuverlässigkeit des gesamten Modells aufgrund der mit DNS verbundenen Schwachstellen beeinträchtigt. Es sollte auch beachtet werden, dass DNSSEC nichts unternimmt, um den Datenverkehr zwischen Clients und rekursiven Systemen abzusichern, da diese in der Zwischenzeit für Man-Spoofing anfällig bleiben.
Andrew B
Andrew, ich sehe das Problem mit DNSSEC und MIDM, wenn DNSSEC nicht für eine Domäne erzwungen wird und das Forcen nur durchgeführt werden kann, wenn jede einzelne Suche durchgeführt wird, indem der Stammdomänenserver auf den tld überprüft wird. Das Problem ist also, dass wir die Verwendung eines DV-Zertifikats autorisieren möchten, indem wir den Eigentümer auf dessen Gültigkeit hinweisen lassen. Wir können DNS jedoch aufgrund seiner hierarchischen Struktur nicht vertrauen. Die Tatsache, dass DNS anfällig für Spoofing und MIDM-Angriffe ist, macht DV-Zertifikate zu einer Art externer Validierung eines Domain-Eintrags. Hmm, ich werde weiter darüber nachdenken ...
Jelmer Jellema

Antworten:

18

Die Basisinfrastruktur, die dies ermöglichen würde, ist vorhanden und wird als DNS-basierte Authentifizierung von benannten Entitäten (DANE) bezeichnet und in RFC6698 angegeben . Es funktioniert mithilfe eines TLSARessourceneintrags, der das Zertifikat oder seinen öffentlichen Schlüssel der Endentität oder einer seiner Zertifizierungsstellen in der Kette angibt.

Annahme

Eine breite Akzeptanz hat DANE jedoch noch nicht gesehen. VeriSign überwacht die Einführung von DNSSEC und DANE und verfolgt dessen Wachstum im Laufe der Zeit :

Weltweite TLSA-Bereitstellung zwischen dem 17. Juni

Zum Vergleich, laut VeriSign gibt es ungefähr 2,7 Millionen DNS-Zonen, was bedeutet, dass etwas mehr als 1% aller Zonen mindestens einen TLSA-Eintrag haben.

Ich kann keine verbindliche Antwort geben, warum DANE, aber hier sind meine Spekulationen:

DANE hat das gleiche Problem wie Certificate Revocation Lists (CRLs) und das Online Certificate Status Protocol (OCSP). Um die Gültigkeit eines vorgelegten Zertifikats zu überprüfen, muss ein Dritter kontaktiert werden. Hanno Böck gibt einen guten Überblick , warum dies in der Praxis ein großes Problem ist. Es läuft darauf hinaus, was zu tun ist, wenn Sie den Dritten nicht erreichen können. Browser-Anbieter entschieden sich in diesem Fall für Soft-Fail (auch als Erlaubnis bezeichnet), was das Ganze ziemlich sinnlos machte und Chrome schließlich entschied, OCSP im Jahr 2012 zu deaktivieren.

DNSSEC

Es ist anzunehmen, dass DNS eine viel bessere Verfügbarkeit bietet als die CRL- und OCSP-Server von Zertifizierungsstellen, aber dennoch eine Offline-Überprüfung unmöglich macht. Darüber hinaus sollte DANE nur in Verbindung mit DNSSEC verwendet werden. Da normales DNS über nicht authentifiziertes UDP betrieben wird, ist es sehr anfällig für Fälschungen, MITM-Angriffe usw. Die Einführung von DNSSEC ist viel besser als die Einführung von DANE, ist jedoch noch weit davon entfernt, allgegenwärtig zu sein.

Und mit DNSSEC stoßen wir erneut auf das Soft-Fail-Problem. Nach meinem besten Wissen bietet kein wichtiges Server- / Client-Betriebssystem standardmäßig einen validierenden DNSSEC-Resolver an.

Dann gibt es noch das Thema Widerruf. DNSSEC hat keinen Sperrmechanismus und stützt sich stattdessen auf kurzlebige Schlüssel.

Software-Unterstützung

Alle teilnehmenden Softwareprogramme müssen DANE-Unterstützung implementieren.

Theoretisch könnte man meinen, dass Kryptobibliotheken und Anwendungsentwickler nicht viel dafür tun müssten. Fakt ist jedoch, dass kryptografische Bibliotheken in der Regel nur Grundelemente bereitstellen und Anwendungen viel selbst konfigurieren und einrichten müssen (und es gibt leider viele Möglichkeiten, die Dinge falsch zu machen).

Mir ist nicht bekannt, dass ein wichtiger Webserver (z. B. Apache oder Nginx) beispielsweise DANE implementiert hat oder plant, dies zu tun. Webserver sind hier von besonderer Bedeutung, da immer mehr Dinge auf Webtechnologien aufbauen und daher häufig die ersten sind, bei denen Dinge implementiert werden.

Wenn wir CRL, OCSP und OCSP-Heftung als Vergleich betrachten, können wir möglicherweise ableiten, wie die DANE-Adoptionsgeschichte verlaufen wird. Nur einige der Anwendungen, die OpenSSL, libnss, GnuTLS usw. verwenden, unterstützen diese Funktionen. Es hat eine Weile gedauert, bis wichtige Software wie Apache oder Nginx sie unterstützten. Wenn man sich erneut auf Hanno Böck bezieht, ist das falsch und die Implementierung fehlerhaft. Andere große Softwareprojekte wie Postfix oder Dovecot unterstützen OCSP nichtund haben eine sehr eingeschränkte CRL-Funktionalität, die im Grunde genommen auf eine Datei im Dateisystem verweist (was nicht unbedingt regelmäßig neu gelesen werden muss, sodass Sie Ihren Server manuell neu laden müssten usw.). Beachten Sie, dass dies Projekte sind, die häufig TLS verwenden. Dann können Sie sich Dinge ansehen, bei denen TLS weitaus seltener vorkommt, wie beispielsweise PostgreSQL / MySQL, und vielleicht bestenfalls CRLs anbieten.

Ich habe es also nicht einmal auf modernen Webservern implementiert, und die meisten anderen Programme haben noch nicht einmal die Möglichkeit, OCSP und CRL zu implementieren. Viel Glück mit Ihrer 5-jährigen Unternehmensanwendung oder Appliance.

Anwendungsmöglichkeiten

Also, wo könnten Sie DANE wirklich benutzen? Ab sofort nicht im allgemeinen Internet. Wenn Sie den Server und den Client steuern, ist dies möglicherweise eine Option. In diesem Fall können Sie jedoch häufig auf das Pinning mit öffentlichen Schlüsseln zurückgreifen.

Im E-Mail-Bereich erhält DANE eine gewisse Zugkraft, da SMTP die längste Zeit über keine authentifizierte Transportverschlüsselung verfügte. SMTP-Server haben manchmal untereinander TLS verwendet, haben jedoch nicht überprüft, ob die Namen in den Zertifikaten tatsächlich übereinstimmen. Sie beginnen nun, dies über DANE zu überprüfen.

Sebastian Schrader
quelle
6
Ich denke, dein letzter Satz wurde abgeschnitten.
8bittree,
Danke Sebastian, deine Reaktion ist sehr hilfreich. Bitte beachten Sie meine und Andrews Kommentare unter dem OP.
Jelmer Jellema
3
Warum müssen Webserver dies implementieren? Ich könnte der Apache-Konfiguration ein selbstsigniertes Zertifikat hinzufügen und den Fingerabdruck selbst in den DNS eintragen, oder?
Jelmer Jellema
1
Es gibt auch Leistungs- und Skalierbarkeitsprobleme mit DNSSEC im Vergleich zu DNS: Normales DNS kann "vorgespeicherte" Antworten verwenden, aber DNSSEC muss für jede Anforderung eine Kryptodance durchführen, und es gibt eine Menge DNS-Anforderungen, die herumfliegen. Wie viele DNS-Anfragen.
Joker_vD
4
@Joker_vD DNSSEC signiert die Daten, nicht den Datenverkehr. Dh, am maßgeblichen Ende können Sie Ihre Zone signieren und haben keine "Kryptodance" für die Lebensdauer der Signaturen (oder bis Sie die Zonendaten ändern); Auf der Validatorseite (Client-Seite) muss die "Kryptodance" pro nicht zwischengespeicherter Anforderung stattfinden. Sowohl die zusätzlichen Daten als auch der DNSSEC-Status passen zum allgemeinen Caching-Modell für DNS.
Håkan Lindqvist
5

Verschiedene Arten von Zertifikatsvalidierungsverfahren

Bei den regulären CA-signierten Zertifikaten gibt es mehrere Ebenen der Zertifikatvalidierung:

  • Domain Validation (DV)
    Nur der Besitz eines Domainnamens wird validiert, nur der Domainname wird im Zertifikat als "Betreff" angezeigt
  • Organisationsvalidierung (OV)
    Domänenname und Eigentümername werden validiert, Domänenname und Eigentümername werden im Zertifikat als "Betreff" angezeigt
  • Erweiterte Validierung (EV)
    Eine strengere Validierung der Eigentümerentität, des Domainnamens und des Eigentümernamens wird im Zertifikat als "Betreff" angezeigt, grüner Balken mit dem Eigentümernamen

Der Prozess, den Sie beschreiben und für den Sie einen Ersatz vorschlagen, gilt nur für die niedrigste Ebene, die Domain Validation (DV).

DV ist die Ebene, auf der die Validierung relativ einfach zu automatisieren ist, z. B. was LetsEncrypt getan hat, und bietet eine ähnliche Vertrauensebene wie DNS, wenn es als einzige Quelle für einen Vertrauensanker verwendet würde (Auswirkungen auf die Benutzeroberfläche, cert may vertrauenswürdig sein, aber zusätzliche Daten enthalten, die in keiner Weise validiert sind).

DNS-basierte Authentifizierung benannter Entitäten (DANE)

DANE baut auf DNSSEC auf (da die Authentizität der DNS-Daten von entscheidender Bedeutung ist), um Vertrauensankerinformationen für TLS-Clients in DNS zu veröffentlichen.

Es verwendet den TLSARR-Typ und kann verwendet werden, um entweder das Zertifikat oder den öffentlichen Schlüssel ( Selektor ) der Endentität oder der Zertifizierungsstelle zu identifizieren , wobei oder auch, um erfolgreich zu sein, die regelmäßige Überprüfung der Zertifikatkette erforderlich ist (Verwendung des Zertifikats ) und wie das Zertifikat / Schlüsseldaten werden im Datensatz dargestellt ( passender Typ ).

Der TLSAName des Datensatzinhabers hat ein Präfix, das den Port und das Protokoll (z. B. _443._tcp) angibt cert usage, selectorund die RData gibt die matching typeModi und zusätzlich zu den übereinstimmenden Zertifikats- / Schlüsseldaten an. Einzelheiten zu diesen Parametern finden Sie in Abschnitt 2.1 von RFC6698 .

Ein TLSADatensatz kann beispielsweise so aussehen:

_443._tcp.www.example.com. IN TLSA  2 0 1 d2abde240d7cd3ee6b4b28c54df034b9 7983a1d16e8a410e4561cb106618e971

Bei den Verwendungsmodi 2oder 3(zeigt an, dass nur der TLSA-Vertrauensanker verwendet wird) würde ein DANE-fähiger Client ein Zertifikat akzeptieren, das nicht von einer allgemein vertrauenswürdigen Zertifizierungsstelle signiert ist, das jedoch mit dem TLSADatensatz übereinstimmt .
Dies ist konzeptionell dasselbe wie das, was Sie in Ihrer Frage vorschlagen.

Der Fang? DANE-fähige Clients sind derzeit mehr oder weniger nicht vorhanden. Ein Problem besteht darin, dass DNSSEC selbst nicht so weit verbreitet ist (insbesondere die Validierung auf dem Client-Computer), wie dies wahrscheinlich für den Start von DANE erforderlich wäre. Wahrscheinlich ein kleines Henne-Ei-Problem, wenn man bedenkt, dass DANE einer der ersten potenziell großen neuen Anwendungsfälle ist, die sich auf authentifizierte DNS-Daten stützen.

Es gibt ein Browser-Plugin, das die DNSSEC- und DANE-Validierung hinzufügt. Abgesehen davon gibt es derzeit nicht viel, was dem Mainstream nahe kommt. Und da es sich um ein Plugin handelt, das nicht von Haus aus unterstützt wird, dient es mehr als Proof-of-Concept als alles andere, wenn es um die allgemeine Verwendung geht.


Es könnte getan werden. Es wurde überlegt. Es könnte immer noch passieren, aber es hat nicht viel Bewegung gegeben.

Håkan Lindqvist
quelle
Vielen Dank, Håkan. Wie Andrew unter meinem OP hervorhebt, gibt es ein Problem mit DNS und DNSSEC, da DNSSEC nicht erzwungen wird (auch wenn die Schlüssel im TLD-DNS vorhanden sind, denke ich). DNS-Server auf dem Weg könnten die DANE-Informationen verfälschen , richtig? Daher sollte DNSSEC verpflichtet sein, dass die DANE-Datensätze gültig sind, was wiederum bedeutet, dass bei jeder Überprüfung auch die Schlüssel auf dem TLD-Server überprüft werden müssen.
Jelmer Jellema
5
@JelmerJellema Wie ich in meiner Antwort festgestellt habe, muss DNSSEC auf dem Client validiert werden (dies ist nicht das Problem, auf das Andrew hingewiesen hat), und es können nur erfolgreich validierte signierte TLSA-Datensätze verwendet werden. Dieses Problem, von dem Sie sprechen, ist kein Designproblem, sondern ein Problem in Bezug auf die Unterstützung von Mainstream-Software.
Håkan Lindqvist
2
Obwohl nicht perfekt, führen immer mehr rekursive oder offene Nameserver wie 8.8.8.8 oder 9.9.9.9 eine DNSSEC-Validierung durch. dnssec-Trigger, der auf ungebundenen und / oder etwas wie stubby basiert, würde eine vollständige DNSSEC-Validierung auf den Clients ermöglichen, ohne dass unbedingt ein vollständiger DNS-Resolver auf dem Client validiert werden muss. Aber wir sind in der Tat weit davon entfernt ...
Patrick Mevzek