Kostenloses SSL-Zertifikat mit Let's Encrypt – Teil 1: Allgemeines zu SSL-Zertifikaten
Seit der DSGVO benötigt so gut wie jede Webseite eine SSL-Verschlüsselung. In dieser Artikelserie möchte ich zeigen, wie ihr kostenlos zu einem SSL-Zertifikat für eure Websites kommt und wie ihr es installiert.
In diesem ersten Artikel der Serie möchte ich erstmal etwas über SSL-Zertifikate allgemein schreiben.
Was ist ein SSL-Zertifikat überhaupt?
Ein Zertifikat ist im Prinzip nur eine einfache Datei mit ein bisschen Buchstabensalat. Innerhalb des Zertifikats stehen Informationen kodiert, für wen das Zertifikat ausgestellt worden ist. Anschließend wird das Zertifikat digital mit einem kryptographischen Schlüssel unterschrieben (signiert).
Ein Zertifikat erfüllt im Grunde zwei Funktionen:
- Verschlüsselung: Es verschlüsselt die Daten, die zwischen Server und Client ausgetauscht werden.
- Authentifizierung: Es garantiert, dass die Webseite auch wirklich die Webseite ist, die sie vorgibt zu sein.
Verschlüsselung
Mittels des Zertifikats können Client (das ist dein Browser) und Server (das ist die Webseite, die du aufrufen möchtest) einen sicheren Kommunikationskanal aushandeln. Die Kommunikation erfolgt dann nicht mehr im Klartext, sondern verschlüsselt.
Eine sogenannte Man-in-the-Middle-Attacke (MITM-Attacke) ist damit nicht mehr möglich. Bei einem MITM stellen wir uns z. B. den bösen Bruder vor, der die Netzwerkkabel umgesteckt hat, einen bösen WLAN-Hotspot oder die böse NSA, die das Kabel angezapft hat. Ein MITM, der die Kommunikation belauscht, kann so weder verstehen, was Server und Client austauschen, noch kann er diese Kommunikation verändern.
Authentifizierung
Ein eigenes Zertifikat erstellt man mit nur einer einzigen Befehlszeile. Nachfolgend im Bild dargestellt, ein Zertifikat, was ich für die Sparkasse angelegt hab:
Ähhh… für die Sparkasse!?? – Ja, für die Sparkasse. Mit diesem Zertifikat kann ich eine Webseite
www.sparkasse.de
via HTTPS betreiben und somit so tun, als wäre ich eine Bank. Wenn ich diese
Webseite ins Internet stelle und es schaffe, die DNS-Einträge so hinzumanipulieren, dass das Opfer
nicht den Server der echten Sparkasse kontaktiert, sondern meinen Server, so sieht das Opfer im
Browser eine verschlüsselte Verbindung zu www.sparkasse.de
mit https
davor.
Das einzige Merkmal, was der Nutzer hat, dass was nicht stimmt, ist, dass das Zertifikat selbst-signiert (self-signed) ist. Der Browser erkennt das Problem und warnt uns. Firefox erlaubt dem Nutzer in einem erweiterten Dialog trotz des Risikos die Verbindung aufzubauen. Chrome sperrt den Zugang komplett.
-
Firefox und Chrome zeigen Sicherheitswarnung für selbst-signiertes Sparkassen-Zertifikat -
Sicherheitswarnung für selbst-signiertes Sparkassen-Zertifikat: Firefox und Chrome mit erweiterten Informationen -
Fake-Sparkasse mit selbst-signiertem Zertifikat. Firefox zeigt die falsche Seite an, wenn man drauf besteht. Chrome blockiert komplett.
Chain of trust
Das ist nun die zweite Aufgabe des Zertifikats. Damit garantiert ist, dass die Sparkasse (also die Webseite, die der Nutzer sieht) wirklich die Sparkasse ist, prüft der Browser im Zertifikat die Vertrauenskette (chain of trust) und entscheidet damit, ob er diesem Zertifikat vertraut. Hierzu wird nachgeschlagen, von wem das Zertifikat signiert wurde. Wird dem Signierer vertraut, so wird automatisch auch dem Zertifikat vertraut; vertraut man dem Signierer nicht, so traut man auch dem Zertifikat nicht. In der Praxis ist in jedem Browser eine Liste von Zertifizierungsstellen hinterlegt, denen vertraut wird.
Beispiel: Wir stellen uns vor, ich baue eine Webseite example.com
und möchte ein Zertifikat
hierfür. Ich erzeuge mir erstmal ein Zertifikat und wende mich dann an eine Zertifizierungsstelle
und stelle den Antrag, dass sie doch bitte das Zertifikat unterzeichnen möchten. Im Zertifikat
steht drin "Firma Example GmbH mit Sitz in München betreibt Webseiten www.example.com
und
shop.example.com
".
Die Zertifizierungsstelle wird mein Zertifikat nun erst unterzeichnen, wenn sie meine Angaben
geprüft hat. Sie wird prüfen, ob es diese Firma wirklich gibt. Sie wird mich kontaktieren,
mich anrufen und ggf. Dokumente verlangen und vor allem wird sie einen Beweis fordern, dass die
Webseiten www.example.com
und shop.example.com
wirklich von mir sind. Erst, wenn sie sicher
ist, dass alle Angaben korrekt sind, wird sie das Zertifikat gegenzeichnen.
Warum ist Let's Encrypt kostenlos, während jedes andere Zertifikat regelmäßig horrende Gebühren kostet?
Damit kommen wir nun auch zur Kostenfrage. Zertifikate und damit die Verschlüsselung sind kostenfrei. Jeder kann sie erzeugen und verwenden. Das, was die Sicherheit aber erst ausmacht, ist das Vertrauen, dass man einem Zertifikat entgegenbringt.
Zertifizierungsstellen lassen sich das ordentlich bezahlen. Sie müssen alle Anträge von Hand bearbeiten und je nach Umfang des Zertifikats die Inhalte prüfen und verifizieren. Außerdem ist es ihre Aufgabe, sich drum zu kümmern, dass ihre Root-Zertifikate (Root = jene Zertifikate, die in der Vertrauenskette ganz oben sind) in den Browsern und anderer Software, die SSL-Technologie verwendet, vorinstalliert sind. Eine Zertifizierungsstelle, der keiner vertraut, kann auch keine Zertifikate verkaufen, weil man diesen Zertifikaten dann ja auch nicht traut.
Kommen wir nun zu Let's Encrypt. Let's Encrypt ist eine Zertifizierungsstelle, der von einer gemeinnützigen Organiation angeboten wird. Der Dienst finanziert sich durch Spendengelder. Der gesamte Zertifizierungsprozess wird automatisch über das ACME-Protokoll abgewickelt. Man stellt den Antrag auf ein Zertifikat für eine bestimmte Webseite. Danach erhält man eine Challenge (Aufgabe), die nur der rechtmäßige Inhaber der Webseite erfüllen kann. Zum Schluss kann man das signierte Zertifikat von der Zertifizierungsstelle herunterladen.
Durch diesen Ablauf wird kein Personal für die Überprüfung der Angaben gebraucht. Der Ablauf ist vollständig automatisch. Entsprechend fallen hier auch keine Kosten an. Let's Encrypt ist auf Spendengelder angewiesen, um die Infrastruktur am Leben zu halten.
Let's Encrypt kann deswegen auch nur Zertifikate anbieten, die die Webseite (Domain) des Antragstellers bestätigen. Firmennamen oder andere Informationen können nicht automatisch überprüft werden, weshalb diese Informationen in einem Zertifikat von Let's Encrypt immer fehlen werden.
Im nächsten Teil dieser Artikelserie möchte ich euch Certbot vorstellen. Certbot ist ein Open-Source-Programm, was das ACME-Protokoll nutzt, um Zertifikate von Let's Encrypt zu erhalten und auf den Servern zu installieren.