Zertifizierungsstellen sind einer der wichtigsten Eckpfeiler der Internetsicherheit. Eine Zertifizierungsstelle ist jemand, dem alle vertrauen, am Anfang, wenn niemand einem anderen vertraut. Eine Zertifizierungsstelle ist nicht nur für HTTPS wichtig, das von Browsern und Webanwendungen verwendet wird, sondern auch für verschlüsselte E-Mails, signierte Software-Updates, VPNs und vieles mehr. Wir werden das prototypische Beispiel von HTTPS nehmen und etwas über CA in diesem speziellen Kontext lernen. Sie können das Ergebnis jedoch auf jede andere Software-Suite übertragen.
Das Internet ist ein nicht vertrauenswürdiger Kommunikationskanal. Wenn Sie in Ihrem Browser Informationen von einer alten HTTP-Site http://www.example.com senden oder empfangen, können auf dem Weg zu Ihren Paketen viele Dinge passieren.
- Ein böser Akteur kann die Kommunikation abfangen, die Daten für sich selbst kopieren und sie dann erneut auf dem Kanal zu Ihnen oder dem Server, mit dem Sie gesprochen haben, senden. Ohne das Wissen einer der beiden Parteien sind die Informationen kompromittiert. Wir müssen sicherstellen, dass die Kommunikation privat ist.
- Ein böser Akteur kann die Informationen verändern, während sie über den Kanal gesendet werden. Bob könnte eine Nachricht „x“ gesendet haben, aber Alice würde „y“ von Bob erhalten, weil ein böser Akteur die Nachricht abgefangen und verändert hat. Mit anderen Worten, die Integrität der Nachricht ist gefährdet.
- Schließlich und vor allem müssen wir sicherstellen, dass die Person, mit der wir sprechen, tatsächlich diejenige ist, die sie vorgibt zu sein. Um auf die Domäne example.com zurückzukommen. Wie können wir sicherstellen, dass der Server, der uns geantwortet hat, auch wirklich der rechtmäßige Inhaber von www.example.com ist? An jedem Punkt in Ihrem Netzwerk können Sie zu einem anderen Server umgeleitet werden. Ein DNS ist dafür zuständig, einen Domänennamen wie www.example.com in eine IP-Adresse im öffentlichen Internet umzuwandeln. Ihr Browser hat jedoch keine Möglichkeit zu überprüfen, ob das DNS die IP-Adresse übersetzt hat.
Die ersten beiden Probleme können gelöst werden, indem die Nachricht verschlüsselt wird, bevor sie über das Internet zum Server gesendet wird. Das heißt, indem man zu HTTPS übergeht. Beim letzten Problem, dem Problem der Identität, kommt jedoch eine Zertifizierungsstelle ins Spiel.
Initiierung verschlüsselter HTTP-Sitzungen
Das Hauptproblem bei der verschlüsselten Kommunikation über einen unsicheren Kanal ist: „Wie starten wir sie?“
Der allererste Schritt besteht darin, dass die beiden Parteien, Ihr Browser und der Server, die Verschlüsselungsschlüssel austauschen, die über den unsicheren Kanal ausgetauscht werden sollen. Wenn Sie mit dem Begriff Schlüssel nicht vertraut sind, stellen Sie sich diese als ein sehr langes, zufällig generiertes Passwort vor, mit dem Ihre Daten verschlüsselt werden, bevor sie über den unsicheren Kanal gesendet werden.
Wenn die Schlüssel über einen unsicheren Kanal gesendet werden, kann jeder diesen abhören und die Sicherheit Ihrer HTTPS-Sitzung in Zukunft gefährden. Wie können wir außerdem darauf vertrauen, dass der Schlüssel, der von einem Server gesendet wird, der behauptet, www.example.com zu sein, tatsächlich der tatsächliche Eigentümer dieses Domänennamens ist? Wir können eine verschlüsselte Kommunikation mit einer böswilligen Partei haben, die sich als legitime Website ausgibt, und den Unterschied nicht erkennen.
Das Problem der Identitätssicherung ist also wichtig, wenn wir einen sicheren Schlüsselaustausch gewährleisten wollen.
Zertifizierungsstellen
Sie haben vielleicht schon von LetsEncrypt, DigiCert, Comodo und einigen anderen Diensten gehört, die TLS-Zertifikate für Ihren Domänennamen anbieten. Sie können dasjenige auswählen, das Ihren Bedürfnissen entspricht. Nun muss die Person/Organisation, die Eigentümer der Domäne ist, ihrer Zertifizierungsstelle auf irgendeine Weise nachweisen, dass sie tatsächlich die Kontrolle über die Domäne hat. Dies kann entweder durch die Erstellung eines DNS-Eintrags mit einem eindeutigen Wert geschehen, wie von der Zertifizierungsstelle gefordert, oder Sie können Ihrem Webserver eine Datei mit einem von der Zertifizierungsstelle vorgegebenen Inhalt hinzufügen, die Zertifizierungsstelle kann diese Datei dann lesen und bestätigen, dass Sie der gültige Inhaber der Domäne sind.
Dann handeln Sie mit der Zertifizierungsstelle ein TLS-Zertifikat aus, das zu einem privaten Schlüssel und einem öffentlichen TLS-Zertifikat für Ihre Domäne führt. Nachrichten, die mit Ihrem privaten Schlüssel verschlüsselt wurden, können dann mit dem öffentlichen Zertifikat entschlüsselt werden und umgekehrt. Dies wird als asymmetrische Verschlüsselung bezeichnet
Die Client-Browser wie Firefox und Chrome (manchmal sogar das Betriebssystem) verfügen über die Kenntnis der Zertifizierungsstellen. Diese Informationen sind von Anfang an in den Browser/das Gerät integriert (d. h. bei der Installation), so dass sie wissen, dass sie bestimmten Zertifizierungsstellen vertrauen können. Wenn sie nun versuchen, über HTTPS eine Verbindung zu www.example.com herzustellen und ein Zertifikat sehen, das z. B. von DigiCert ausgestellt wurde, kann der Browser dies anhand der lokal gespeicherten Schlüssel verifizieren. Eigentlich gibt es noch ein paar weitere Zwischenschritte, aber dies ist ein guter, vereinfachter Überblick über die Vorgänge.
Nachdem das von www.example.com ausgestellte Zertifikat als vertrauenswürdig eingestuft wurde, wird es verwendet, um einen eindeutigen symmetrischen Verschlüsselungsschlüssel auszuhandeln, der zwischen dem Client und dem Server für den Rest der Sitzung verwendet wird. Bei der symmetrischen Verschlüsselung wird ein Schlüssel sowohl zum Verschlüsseln als auch zum Entschlüsseln verwendet und ist in der Regel viel schneller als sein asymmetrisches Gegenstück.
Nuancen
Wenn Ihnen die Idee von TLS und Internetsicherheit gefällt, können Sie sich weiter mit diesem Thema befassen, indem Sie sich mit LetsEncrypt und ihrer kostenlosen TLS-CA beschäftigen. Es gibt noch viel mehr Details zu dieser ganzen Angelegenheit, als oben angegeben.