Wie werden SSL-Zertifikate überprüft?

218

Welche Schritte sind erforderlich, um ein SSL-Zertifikat sicher zu überprüfen? Mein (sehr begrenztes) Verständnis ist, dass der Server beim Besuch einer https-Site ein Zertifikat an den Client (den Browser) sendet und der Browser die Ausstellerinformationen des Zertifikats von diesem Zertifikat erhält, diese dann verwendet, um den Aussteller zu kontaktieren, und irgendwie vergleicht Zertifikate für die Gültigkeit.

  • Wie genau wird das gemacht?
  • Was ist mit dem Prozess, der es immun gegen Man-in-the-Middle-Angriffe macht?
  • Was hindert eine zufällige Person daran, einen eigenen Verifizierungsdienst für Man-in-the-Middle-Angriffe einzurichten, damit alles "sicher" aussieht?
rcreswick
quelle
fand dieses Video sehr nützlich, um den Fluss zu verstehen youtube.com/watch?v=T4Df5_cojAs
Krishna

Antworten:

308

Hier ist eine sehr vereinfachte Erklärung:

  1. Ihr Webbrowser lädt das Zertifikat des Webservers herunter, das den öffentlichen Schlüssel des Webservers enthält. Dieses Zertifikat ist mit dem privaten Schlüssel einer vertrauenswürdigen Zertifizierungsstelle signiert.

  2. Ihr Webbrowser wird mit den öffentlichen Schlüsseln aller wichtigen Zertifizierungsstellen installiert. Mit diesem öffentlichen Schlüssel wird überprüft, ob das Zertifikat des Webservers tatsächlich von der vertrauenswürdigen Zertifizierungsstelle signiert wurde.

  3. Das Zertifikat enthält den Domänennamen und / oder die IP-Adresse des Webservers. Ihr Webbrowser bestätigt mit der Zertifizierungsstelle, dass die im Zertifikat angegebene Adresse diejenige ist, zu der eine offene Verbindung besteht.

  4. Ihr Webbrowser generiert einen gemeinsam genutzten symmetrischen Schlüssel, mit dem der HTTP-Verkehr auf dieser Verbindung verschlüsselt wird. Dies ist viel effizienter als die Verwendung der Verschlüsselung mit öffentlichen / privaten Schlüsseln für alles. Ihr Browser verschlüsselt den symmetrischen Schlüssel mit dem öffentlichen Schlüssel des Webservers und sendet ihn dann zurück. Dadurch wird sichergestellt, dass nur der Webserver ihn entschlüsseln kann, da nur der Webserver über seinen privaten Schlüssel verfügt.

Beachten Sie, dass die Zertifizierungsstelle (CA) unerlässlich ist, um Man-in-the-Middle-Angriffe zu verhindern. Selbst ein nicht signiertes Zertifikat verhindert jedoch, dass jemand Ihren verschlüsselten Datenverkehr passiv abhört, da er keinen Zugriff auf Ihren freigegebenen symmetrischen Schlüssel hat.

Eli Courtwright
quelle
4
Um Schritt 1.5 "signiert" der Server auch etwas mit dem privaten Schlüssel, der seinem Zertifikat zugeordnet ist. Dies wird mit der Namens- / IP-Prüfung kombiniert, um sicherzustellen, dass nur die Eigentümer-Site des Zertifikats es präsentiert.
Darron
68
Ein vollständig funktionierendes Beispiel für diesen Prozess mit Firefox, das eine Verbindung zu amazon.com herstellt , finden Sie unter moserware.com/2009/06/first-few-milliseconds-of-https.html
Jeff Moser
9
Ich wusste nicht, dass mein Browser mit den öffentlichen Schlüsseln aller wichtigen Zertifizierungsstellen installiert ist. Jetzt weiß ich, wie meine SSL-Zertifikate ohne MITM-Risiko überprüft werden :). Vielen Dank!
OneChillDude
5
Der Server muss ein Zertifikat von CAuthority anfordern, damit er eine Anforderung an CAuthority sendet. Wie kann CA sicher sein, dass der Server gültig ist?
Voipp
4
@voipp: Gute Frage! In der Vergangenheit gab es einige Ansätze, z. B. "Senden Sie eine E-Mail von webmaster@<domain-being-verified>" oder "Platzieren Sie diese Datei in Ihrer Domain, um zu beweisen, dass Sie sie besitzen". Es gab jedoch tatsächlich Probleme damit, dass CAs Zertifikate für Domains ausstellen, die sie nicht besitzen Eigen - bekanntlich hat es jemand geschafft, eine zwielichtige Zertifizierungsstelle dazu zu bringen, ihnen ein Zertifikat für gmail.com auszustellen!
Eli Courtwright
58

Es ist erwähnenswert, dass Sie neben dem Kauf eines Zertifikats (wie oben erwähnt) auch kostenlos ein eigenes Zertifikat erstellen können. Dies wird als "selbstsigniertes Zertifikat" bezeichnet. Der Unterschied zwischen einem selbstsignierten und einem gekauften Zertifikat ist einfach: Das gekaufte Zertifikat wurde von einer Zertifizierungsstelle signiert, die Ihr Browser bereits kennt. Mit anderen Worten, Ihr Browser kann die Authentizität eines gekauften Zertifikats leicht überprüfen.

Leider hat dies zu einem häufigen Missverständnis geführt, dass selbstsignierte Zertifikate von Natur aus weniger sicher sind als solche, die von kommerziellen Zertifizierungsstellen wie GoDaddy und Verisign verkauft werden, und dass Sie mit Browser-Warnungen / Ausnahmen leben müssen, wenn Sie sie verwenden. das ist falsch .

Wenn Sie ein selbstsigniertes Zertifikat (oder ein CA-Zertifikat, wie von Bobince vorgeschlagen) sicher verteilen und in den Browsern installieren, die Ihre Site verwenden , ist es genauso sicher wie eines, das gekauft wurde, und ist nicht anfällig für Man-in-the-Middle Angriffe und Fälschungen. Dies bedeutet natürlich, dass dies nur möglich ist, wenn nur wenige Personen einen sicheren Zugriff auf Ihre Website benötigen (z. B. interne Apps, persönliche Blogs usw.).

Clint Harris
quelle
1
In der Tat ist die sichere Verteilung Ihres eigenen Zertifikats eine Möglichkeit, die Katze zu häuten, aber eine viel einfachere Möglichkeit besteht darin, zu einer von mehreren sogenannten "offenen" Zertifizierungsstellen zu gehen. CACert.org ist mein Favorit. Solange Sie den Schritten vertrauen, die sie zum Schutz ihrer Zertifikatsausstellung unternehmen, ist der Import ihres Stammzertifikats sicher.
nsayer
6
Ich liebe diesen Kommentar - leider zeigt er eine sehr wichtige Schwäche bei Zertifizierungsstellen. Angenommen, Sie importieren ein CA-Zertifikat von Bob Smith. Bob Smith kann ein Zertifikat für jede Domain (einschließlich google.com und Chase.com) signieren. Aus diesem Grund zahlen GoDaddy / Verisign viel Geld, um in das Betriebssystem aufgenommen zu werden. Sie werden von einem Sicherheits-Outfit überprüft, um sicherzustellen, dass Überprüfungen vorhanden sind, um sicherzustellen, dass sie kein Zertifikat für eine böswillige Person unterschreiben. Ich denke, Sie sollten sagen können, dass diese Zertifizierungsstelle nur Zertifikate für mysite.com signieren kann.
Natalie Adams
Ist das selbstsignierte Zertifikat nicht sicherer, da die Zertifizierungsstellen dafür bezahlt werden könnten, etwas zu signieren, das sie nicht haben sollten. Wenn Sie die CA-Zertifikate sicher an die Endpunkte verteilen können, verwenden Sie immer selbstsignierte Zertifikate.
JavaPhobic
Gibt es Zertifizierungsstellen, die in den meisten gängigen Browsern kostenlos und verifiziert sind? Ich suche ein Basiszertifikat, um zu überprüfen, ob ich eine E-Mail und einen Domainnamen besitze. Diejenigen, die ich gefunden habe, sind jedoch nicht in den meisten gängigen Browsern enthalten.
Alex Kwitny
@ NathanAdams In der Theorie die großen Anfragen prüfen, um zu verhindern, dass gefälschte Zertifikate ausgestellt werden, wie Sie es beschreiben ... aber lesen Sie diese Geschichte: stripe.ian.sh
nsayer
38

Du hast das gesagt

Der Browser erhält die Ausstellerinformationen des Zertifikats von diesem Zertifikat, kontaktiert diese dann, um den Aussteller zu kontaktieren, und vergleicht die Zertifikate auf ihre Gültigkeit.

Der Kunde muss sich nicht an den Emittenten wenden, da zwei Dinge:

  1. In allen Browsern ist eine Liste aller öffentlichen Schlüssel der wichtigsten Zertifizierungsstellen vorinstalliert
  2. Das Zertifikat ist signiert, und diese Signatur selbst ist ein ausreichender Beweis für die Gültigkeit des Zertifikats, da der Client selbst und ohne Kontaktaufnahme mit dem Server des Ausstellers sicherstellen kann, dass dieses Zertifikat authentisch ist. Das ist das Schöne an asymmetrischer Verschlüsselung.

Beachten Sie, dass 2. ohne 1 nicht möglich ist.

Dies wird in diesem großen Diagramm, das ich vor einiger Zeit erstellt habe, besser erklärt

(Springe zu "Was ist eine Signatur?" unten)

Klecks

ychaouche
quelle
9
Dies sollte die akzeptierte Antwort gewesen sein. Die Antwort von @Eli Courtwright ist viel zu kurz, um zu verstehen, wie Zertifikate funktionieren.
Felix Crazzolara
Dies einmal zu lesen mag nicht genug sein, aber wenn Sie bereits mit SSL vertraut sind, bringt dies wirklich alles zusammen. Gut gemacht!
Cameron Gagnon
Fantastisches Bild. Endlich etwas, das meine Fragen erklärt. Überall, wo ich in die Tiefe gehe, habe ich nur gesagt "Der Browser überprüft, ob das Zertifikat richtig ist". ABER WIE MACHT ES DAS?. Dies gibt eine Antwort.
ori6151
8

Der Client verfügt über einen vorab gespeicherten Speicher der öffentlichen Schlüssel der SSL-Zertifizierungsstellen. Es muss eine Vertrauenskette vom Zertifikat für den Server über Zwischenbehörden bis hin zu einem der sogenannten "Root" -Zertifikate bestehen, damit dem Server vertraut werden kann.

Sie können die Liste der vertrauenswürdigen Behörden überprüfen und / oder ändern. Oft tun Sie dies, um ein Zertifikat für eine lokale Behörde hinzuzufügen, der Sie vertrauen - wie das Unternehmen, für das Sie arbeiten, oder die Schule, die Sie besuchen oder was nicht.

Die vorab festgelegte Liste kann je nach verwendetem Client variieren. Die großen Anbieter von SSL-Zertifikaten versichern, dass sich ihre Stammzertifikate in allen gängigen Browsern befinden ($$$).

Monkey-in-the-Middle-Angriffe sind "unmöglich", es sei denn, der Angreifer verfügt über den privaten Schlüssel eines vertrauenswürdigen Stammzertifikats. Da die entsprechenden Zertifikate weit verbreitet sind, hätte die Offenlegung eines solchen privaten Schlüssels schwerwiegende Auswirkungen auf die Sicherheit des E-Commerce im Allgemeinen. Aus diesem Grund werden diese privaten Schlüssel sehr, sehr genau gehütet.

nsayer
quelle