theHacker's Blog
– It's just a glitch in the Matrix –
2

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.

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.

Kommentare zu diesem Artikel

  • Hallo, mein Name ist XXX ich habe eine Frage bezüglich der Programmierung,ich befinde mich gerade in einer Ausbildung als Elektroniker für Energie und Gebäudetechnik und ich habe gemerkt das es mir garkeinen Spaß macht, nun habe ich herrausgefunden, das die Games Branche mir Super gefallen würde.

    Leider bin ich nicht allzugut in Mathe, das liegt daran das ich schon ab der 7. Klasse den Faden verloren habe.

    Ich wollte nun Fragen ob es möglich ist als Programmierer zu agueren, mit wenig Matekenntnissen, ich möchte unbedingt Mathe können und würde mich auf Unterstützung von Dir/Ihnen freuen

    • Hi,

      ich würde sagen, dass du für Programmierung mehr logisches Denken als Mathematik brauchst. Das Rechnen selber übernimmt ja der Computer.

      Je nachdem, was du für Games machen willst, solltest du allerdings schon Verständnis für die nötigen Berechnungen haben. Während 2D noch relativ simple ist, bist du im 3D-Bereich mal eben schnell an dem Punkt, wo du Matrizenberechnungen machen musst.

      Wenn du Programmieren lernen möchtest, so tu das einfach. Such dir eine Programmiersprache aus und guck, ob es dir liegt.
      Denkst du dir aber, dass du nach ein paar Monaten gleich ein Game programmiert hast, solltest du es gehen lassen. Du wirst Zeit brauchen!

Schreib einen Kommentar zum Artikel

CAPTCHA Das Internet ist leider voller Bots. 🙁 Bitte gib den obenstehenden Code ein.
Falls du den Code nicht lesen kannst oder dir unsicher bist, klick einfach hier, um einen neuen Code zu generieren.

Mit Abschicken des Formulars bestätigst du,
die Datenschutz-Infos gelesen zu haben.