Kryptographie – Funktionsweise von HTTPS – Anwendungsentwickler-Podcast #146

Dieser Beitrag ist Teil 4 von 4 in der Serie Kryptographie.

Zum Abschluss meiner kleinen Reihe zum Oberthema Kryptographie widmen wir uns der Funktionsweise von HTTPS in der einhundersechsundvierzigsten Episode des Anwendungsentwickler-Podcasts.

Probeabo bei Audible (Affiliate)

Inhalt

  • Wiederholung
    • Für die elektronische Signatur und die Verschlüsselung von Daten werden Paare aus öffentlichen und privaten Schlüsseln benötigt.
    • Um die Authentizität öffentlicher Schlüssel zu gewährleisten, werden Zertifikate verwendet, die von vertrauenswürdigen Zertifizierungsstellen ausgegeben werden.
  • Probleme
    • Wie können wir bei Millionen verschiedenen Websites sicherstellen, dass sie korrekte Schlüssel nutzen, ohne dass wir alle Websitebetreiber persönlich kennen müssen?
    • Wie kann bei den großen Datenmengen im Internet eine performante Verschlüsselung gewährleistet werden?
  • HTTPS
    • Um mit einem Webserver verschlüsselt kommunizieren zu können, benötigt der Webbrowser den öffentlichen Schlüssel des Webservers.
    • Diesen kann er einfach direkt vom Webserver selbst herunterladen. Aber wer garantiert ihm die Echtheit dieses Schlüssels? Vielleicht wurde der Server gehackt oder der private Schlüssel gestolen.
    • Deswegen liefert der Webserver nicht direkt den öffentlichen Schlüssel aus, sondern ein von einer CA ausgestelltes Zertifikat, das den öffentlichen Schlüssel des Webservers enthält, aber zusätzlich noch die Signatur der CA, die dessen Echtheit bestätigt.
    • Wenn dieses Zertifikat gültig ist (die Prüfung erfolgt gegen die „eingebauten“ CAs im Browser), weiß der Browser sicher, dass er den korrekten Schlüssel erhalten hat und kann ihn für die Verschlüsselung nutzen.
      Zertifikatsliste im Firefox
    • Dabei prüft der Browser auch, ob das Zertifikat zur aktuellen Domain gehört. Der CN enthält bei HTTPS-Zertifikaten diese Domain.
    • Es gibt seit einiger Zeit auch eine kostenlose CA: Let’s Encrypt. Damit kann sich jeder Webserverbetreiber gültige Zertifikate erzeugen, indem er technisch nachweist, dass die Domain und der Server wirklich ihm gehören.
      Zertifikat dieser Website von Let's Encrypt
    • Der Datenverkehr wird bei HTTPS symmetrisch verschlüsselt, da die Schlüssellängen hierbei deutlich kürzer sind, was deutliche Performancevorteile hat. Um diesen Schlüssel zwischen Browser und Webserver auszutauschen wird das obige asymmetrische Verfahren genutzt. Deswegen ist HTTPS ein hybrides Verfahren.
  • Technischer Ablauf
    • CA
      • CA generiert privaten und öffentlichen Schlüssel.
      • CA erstellt selbstsigniertes Root-Zertifikat: ihr eigener öffentlicher Schlüssel signiert mit ihrem privaten Schlüssel.
      • CA-Root-Zertifikat wird in Browser eingebaut.
    • Webserver
      • Webserver generiert privaten und öffentlichen Schlüssel.
      • Webserver lässt öffentlichen Schlüssel von CA mit ihrem privaten Schlüssel signieren.
      • Webserver installiert dieses Zertifikat und konfiguriert HTTPS.
    • Browser
      • Browser öffnet Website auf dem Webserver.
      • Webserver liefert sein Zertifikat aus.
      • Browser prüft das Zertifikat mit dem öffentlichem Schlüssel der CA aus seinem eingebautem Root-Zertifikat und erhält den öffentlichen Schlüssel des Webservers.
      • Browser generiert einen zufälligen temporären Sitzungsschlüssel und verschlüsselt ihn mit dem öffentlichen Schlüssel des Webservers.
      • Browser sendet den verschlüsselten Sitzungsschlüssel an den Webserver, der ihn mit seinem privaten Schlüssel entschlüsselt.
      • Nun kennen Browser und Webserver den Sitzungsschlüssel und können damit symmetrisch den Datenverkehr verschlüsseln.
  • Mögliche Probleme mit HTTPS-Zertifikaten
    • Das Zertifikat ist abgelaufen.
    • Das Zertifikat passt nicht zur Domain.
    • Das Zertifikat wurde von einer nicht vertrauenswürdigen CA ausgestellt.

Links

Navigation der Serie<< Kryptographie – Zertifikate und Zertifizierungsstellen – Anwendungsentwickler-Podcast #145
Polyglot Clean Code Developer
About the Author
Ausbildungsleiter für Fachinformatiker Anwendungsentwicklung und Systemintegration, IHK-Prüfer und Hochschuldozent für Programmierung und Software-Engineering.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

To create code blocks or other preformatted text, indent by four spaces:

    This will be displayed in a monospaced font. The first four 
    spaces will be stripped off, but all other whitespace
    will be preserved.
    
    Markdown is turned off in code blocks:
     [This is not a link](http://example.com)

To create not a block, but an inline code span, use backticks:

Here is some inline `code`.

For more help see http://daringfireball.net/projects/markdown/syntax