2009-02-26 7 views
18

Sagen Sie, wenn Sie https verwenden, stellt der Browser eine Anfrage an den Server und der Server gibt sein Zertifikat einschließlich des öffentlichen Schlüssels und der CA-Signatur zurück.SSL-Frage: Wie überprüft eine ROOT-CA eine Signatur?

An dieser Stelle fragt der Browser seine CA nach, ob der angegebene öffentliche Schlüssel wirklich zum Server gehört oder nicht?

Wie wird diese Überprüfung vom Root-Zertifikat im Browser durchgeführt?

Um ein Beispiel zu geben: Say serverX erhielt ein Zertifikat von CA "rootCA". Der Browser hat eine Kopie von rootCA lokal gespeichert. Wenn der Browser ServerX anpingt und dieser mit seinem öffentlichen Schlüssel + Signatur antwortet. Jetzt verwendet die Root-CA ihren privaten Schlüssel, um die Signatur zu entschlüsseln und sicherzustellen, dass es sich wirklich um ServerX handelt.

ist es wie es funktioniert?

Antwort

48

Ihr Server verfügt über ein Zertifikat, das aus einem privaten und einem öffentlichen Schlüssel besteht. Der Server gibt natürlich niemals den privaten Schlüssel aus, aber jeder kann den öffentlichen Schlüssel erhalten. Der öffentliche Schlüssel ist in ein Zertifikatcontainerformat eingebettet. Dieses Format enthält die IP-Adresse oder den Domain-Namen des Servers, den Besitzer dieser IP-Adresse/Domain-Name, eine E-Mail-Adresse des Eigentümers usw.

Das Ganze ist von einer vertrauenswürdigen Autorität unterzeichnet. Die vertrauenswürdige Autorität, auch bekannt als Zertifizierungsstelle (Certificate Authority, CA), hat ebenfalls ein privates/öffentliches Schlüsselpaar. Sie geben ihnen Ihr Zertifikat, sie verifizieren, dass die Informationen im Container korrekt sind und signieren sie mit ihrem privaten Schlüssel, nur sie haben Zugriff darauf.

Der öffentliche Schlüssel der Zertifizierungsstelle ist standardmäßig auf dem Benutzersystem installiert, die meisten bekannten Zertifizierungsstellen sind bereits in der Standardinstallation Ihres bevorzugten Betriebssystems oder Browsers enthalten.

Wenn nun ein Benutzer eine Verbindung zu Ihrem Server herstellt, verwendet Ihr Server den privaten Schlüssel zum Signieren einiger Daten, Pakete, die Daten mit seinem öffentlichen Schlüssel signieren, und sendet alles an den Client.

Was kann der Client jetzt tun? Zuallererst kann es den öffentlichen Schlüssel verwenden, der gerade gesendet wurde, um die signierten Daten zu verifizieren. Da nur der Besitzer des privaten Schlüssels in der Lage ist, die Daten korrekt so zu signieren, dass der öffentliche Schlüssel die Signatur verifizieren kann, weiß er, dass derjenige, der dieses Datenelement signiert hat, den privaten Schlüssel zu dem empfangenen öffentlichen Schlüssel besitzt . So weit, so gut. Aber was hält einen Hacker davon ab, das Paket abzufangen, die signierten Daten durch Daten zu ersetzen, die er mit einem anderen Zertifikat signiert hat, und den öffentlichen Schlüssel durch seinen öffentlichen Schlüssel zu ersetzen? Nichts.

Deshalb überprüft der Client, nachdem die signierten Daten verifiziert wurden (oder bevor sie verifiziert werden), ob der empfangene öffentliche Schlüssel eine gültige CA-Signatur besitzt. Mithilfe des bereits installierten öffentlichen Zertifizierungsstellenschlüssels wird überprüft, ob der empfangene öffentliche Schlüssel von einer bekannten Zertifizierungsstelle signiert wurde. Andernfalls wird es abgelehnt (wie ein Hacker es auf dem Weg vielleicht ersetzt).

Last but not least, überprüft es die Informationen innerhalb des öffentlichen Schlüssels Container. Entspricht die IP-Adresse oder der Domänenname wirklich der IP-Adresse oder dem Domänennamen des Servers, mit dem der Client gerade kommuniziert? Wenn nicht, ist etwas fischig!

Die Leute mögen fragen: Was hält einen Hacker davon ab, nur sein eigenes Schlüsselpaar zu erstellen und nur seinen Domainnamen oder seine IP-Adresse in das Zertifikat zu setzen? Einfach: Wenn er das macht, wird kein CA seinen Schlüssel signieren. Um eine CA-Signatur zu erhalten, müssen Sie nachweisen, dass Sie wirklich der Eigentümer dieser IP-Adresse oder des Domänennamens sind. Der Hacker ist nicht, er kann das nicht beweisen, er wird keine Unterschrift bekommen. Das wird also nicht funktionieren.

Okay, wie wäre es mit dem Hacker registriert seine eigene Domain, ein Zertifikat dafür erstellen, und das von einer CA unterzeichnet haben? Das funktioniert, er wird es signiert bekommen, es ist seine Domäne, kein Problem. Er kann dies jedoch nicht verwenden, wenn Sie Ihre Verbindung hacken. Wenn er dieses Zertifikat verwendet, wird der Browser sofort sehen, dass der signierte öffentliche Schlüssel für die Domain example.net ist, aber er redet gerade mit example.com, nicht mit der gleichen Domain, also ist wieder etwas fischig.

+2

Gute Antwort! Aber ich habe eine andere verwandte Frage ... Zitat: "die meisten bekannten CAs sind bereits in der Standard-Installation von Ihrem Lieblings-Betriebssystem oder Browser enthalten." Ich frage mich, wie der Browser die Standard-CA erweitern? Wird es automatisch gegen einen Webservice geprüft? oder wird es nur für die nächste Version der Browser-Version tun? – forestclown

+2

Die CA-Zertifikate werden entweder zusammen mit dem Browser oder dem Betriebssystem ausgeliefert. Firefox, Chrome, Opera haben eigene CA-Cert-Kopien, Internet Explorer und Safari CA-Zertifikate in Windows oder OS X installiert. Nichts hält einen Browser davon ab, sowohl eigene Kopien als auch OS-weite Zertifikate zu verwenden Das). Sie erhalten nur neue Zertifizierungsstellen, indem Sie entweder den Browser aktualisieren, das Betriebssystem aktualisieren oder sie manuell installieren (indem Sie sie herunterladen und dann dem Browser oder Ihrem Betriebssystem hinzufügen, beides ist möglich). – Mecki

+3

Das einzige, was Browser online überprüfen (wenn sie können) ist, ob ein CA-Zertifikat noch gültig ist oder nicht. Jeder CA-Dienst führt einen Zertifikatsperrserver aus, bei dem ein Browser nachfragen kann, ob ein bestimmtes Zertifikat noch gültig ist oder widerrufen wurde. Dies geschieht über das OCSP-Protokoll: http://tinyurl.com/pcjk2 Certs enthalten die Adresse eines zu übergebenden OCSP-Servers. – Mecki

0

Ihr Browser fordert die Zertifizierungsstelle nicht zur Überprüfung auf, stattdessen wird eine Kopie der Stammzertifikate lokal gespeichert, und es wird ein standardmäßiges kryptografisches Verfahren verwendet, um zu überprüfen, ob das Zertifikat wirklich gültig ist.

Aus diesem Grund ist Ihr Zertifikat nicht gültig, wenn Sie ein Zertifikat selbst signieren. Auch wenn es eine Zertifizierungsstelle gibt, können Sie natürlich die selbstsignierte CA auf Ihren Computer kopieren und von da an vertrauen Sie sich selbst Zertifizierungen.

CACert.org hat das gleiche Problem, es hat gültige Zertifikate, aber da Browser seine Root-Zertifikate in ihrer Liste nicht haben, generieren ihre Zertifikate Warnungen, bis die Benutzer die Stammzertifizierungsstellen herunterladen und sie ihrem Browser hinzufügen.

+0

ist es mir nicht klar. Angenommen, ServerX hat ein Zertifikat von CA rootCA erhalten. Browser hat das Root-CA-Zertifikat lokal gespeichert. Wenn der Browser also auf den Server pingt, antwortet er mit seinem öffentlichen Schlüssel + Signatur. Die Root-Zertifizierungsstelle verwendet ihren privaten Schlüssel, um die Signatur zu entschlüsseln und sicherzustellen, dass es sich wirklich um ServerX handelt. – Sesh

+0

Nein, was es überprüft die Signatur, ich kann etwas mit meinem privaten Schlüssel, der gegen meinen öffentlichen Schlüssel validiert. Die Stammzertifizierungsstelle, die lokal gespeichert wird, ist also tatsächlich der öffentliche Teil der Zertifizierungsstelle. Wenn also der entfernte Server ein Zertifikat sendet, dann hat er eine bestimmte Signatur. Diese Signatur kann dann –

+0

mathematisch mit dem öffentlichen Teil der CA verglichen werden, um zu verifizieren, dass der private Teil der CA das Zertifikat tatsächlich selbst signiert hat. –

2

Certs basieren auf einer asymmetrischen Verschlüsselung wie RSA. Sie haben zwei Schlüssel, die üblicherweise als private und öffentliche Schlüssel bezeichnet werden. Etwas, das Sie verschlüsseln mit dem privaten Schlüssel können nur mit dem öffentlichen Schlüssel entschlüsselt werden. (Und tatsächlich, umgekehrt.)

Sie können sich das Zertifikat als einen Pass oder Führerschein vorstellen: Es ist ein Nachweis, der sagt: "Das ist wer ich bin; Sie können es vertrauen, weil es mir gegeben wurde von jemandem (wie Verisign), dem du vertraust. " Dies geschieht mit einer "Signatur", die mit dem öffentlichen Schlüssel der Zertifizierungsstelle berechnet werden kann. Wenn die Daten ursprünglich von der Zertifizierungsstelle erhalten wurden, können Sie das Zertifikat überprüfen.

Das Zertifikat enthält identifizierende Informationen über den Besitzer des Zertifikats. Wenn Sie es erhalten, verwenden Sie die Kombination des Schlüssels, den Sie von Ihrer vertrauenswürdigen Autorität kennen, um zu bestätigen, dass das Zertifikat, das Sie erhalten haben, gültig ist und dass Sie daher davon ausgehen können, dass Sie der Person vertrauen, die das Zertifikat ausgestellt hat.

+0

Die Signatur eines Servers sollte ziemlich einfach zu erhalten sein: Senden Sie einfach eine https-Anfrage an sie. Was passiert, wenn ein ServerY auf diese Weise eine Signatur von ServerX erhält - kann er nicht ServerX imitieren? – Sesh

+0

Nein, wenn Ihr Browser eine Verbindung herstellt, verwendet er einen eindeutigen Start (diffie hellman key exchange). Wenn ServerY nicht über den privaten Schlüssel für Ihr Zertifikat verfügt, der zur Berechnung des öffentlichen Schlüssels verwendet wird, kann er die Identität von ServerX nicht annehmen . –

+0

Sesh, was es * unter bestimmten Bedingungen tun kann, ist ein sogenannter "Interposer" oder "Mann in der Mitte" -Angriff. Dadurch kann der Client auf dem Server, der Server auf dem Client und alle abfangen. Dafür gibt es Schutz. Google "Mann in der Mitte" und SSL für Details. –

6

Das Serverzertifikat ist mit dem privaten Schlüssel der Zertifizierungsstelle signiert. Der Browser verwendet den öffentlichen Schlüssel der Zertifizierungsstelle, um die Signatur zu überprüfen. Es gibt keine direkte Kommunikation zwischen Browser und CA.

Der wichtige Punkt ist, dass der Browser mit dem öffentlichen CA-Schlüssel ausgeliefert wird. In Firefox siehe Extras-> Optionen-> Erweitert-> Verschlüsselung-> AnsichtZertifikate-> Behörden. Der Browser kennt daher alle CAs, denen er vertrauen kann.

Wenn Sie dies nicht verstehen, lesen Sie die Grundlagen der asymmetrischen Kryptographie und digitalen Signaturen.

Verwandte Themen