Webseiten mit HTTPS bereitstellen und mit HSTS und HPKP sichern 26. Oktober 2017
Inhalt 1
Inhalt 1 2
Inhalt 1 2 3
Der Prozess im Überblick Erzeugung eines privaten Schlüssels Generierung einer Zertifikatsanfrage (CSR) CA signiert CSR und stellt Zertifikat aus Implementierung des Zertifikats 1 Erzeugung eines privaten Schlüssels 2 Generierung einer Zertifikatsanfrage (CSR) 3 Übermittlung des CSR an eine Zertifizierungsstelle (CA) 4 Ausstellung eines signierten Zertifikats durch die CA 5 Implementierung des privaten Schlüssels und des Zertifikats auf dem Webserver
Erzeugung eines privaten Schlüssels Generierung einer Zertifikatsanfrage (CSR) CA signiert CSR und stellt Zertifikat aus Implementierung des Zertifikats Erzeugung eines privaten Schlüssels / tmp$ openssl genrsa -aes256 -out test.key 2048 Generating RSA private key, 2048 bit long modulus...+++...+++ e is 65537 (0 x10001 ) Enter passphrase for test.key: Verifying - Enter passphrase for test.key: Achtung Der private Schlüssel ist stets auf einem vertrauenswürdigen Host zu erzeugen. Er sollte niemals im Web auf den Seiten einer CA generiert werden.
Erzeugung eines privaten Schlüssels Generierung einer Zertifikatsanfrage (CSR) CA signiert CSR und stellt Zertifikat aus Implementierung des Zertifikats Generierung einer Zertifikatsanfrage (CSR) openssl req -batch -sha256 -new -key test.key -out test.csr \ -subj "/C=DE/L=Musterstadt/O=Musterfirma/OU=Musterabteilung/ \ CN=foo.example.com/emailAddress=foo@example.com" Achtung Auch dieser Schritt sollte auf einem vertrauenswürdigen Host ausgeführt werden. Der private Schlüssel darf den Host nicht verlassen.
Beispiel einer PKI Erzeugung eines privaten Schlüssels Generierung einer Zertifikatsanfrage (CSR) CA signiert CSR und stellt Zertifikat aus Implementierung des Zertifikats Abbildung: Verarbeitung eines CSR durch RA und CA
Erzeugung eines privaten Schlüssels Generierung einer Zertifikatsanfrage (CSR) CA signiert CSR und stellt Zertifikat aus Implementierung des Zertifikats Beispiele für Zertifizierungsstellen DFN-PKI Let s Encrypt WoSign CAcert Symantec Hosting-Provider wie z. B. Strato, Hosteurope, 1&1, usw. Selbstsignierte Zertifikate (durch eigene CA)
Erzeugung eines privaten Schlüssels Generierung einer Zertifikatsanfrage (CSR) CA signiert CSR und stellt Zertifikat aus Implementierung des Zertifikats Implementierung auf einem Webserver Die Dateien gehören nicht ins DocumentRoot
Erzeugung eines privaten Schlüssels Generierung einer Zertifikatsanfrage (CSR) CA signiert CSR und stellt Zertifikat aus Implementierung des Zertifikats Implementierung auf einem Webserver Die Dateien gehören nicht ins DocumentRoot Zugriffsrechte auf den privaten Schlüssel soweit wie möglich beschränken
Erzeugung eines privaten Schlüssels Generierung einer Zertifikatsanfrage (CSR) CA signiert CSR und stellt Zertifikat aus Implementierung des Zertifikats Implementierung auf einem Webserver Die Dateien gehören nicht ins DocumentRoot Zugriffsrechte auf den privaten Schlüssel soweit wie möglich beschränken Zertifikatskette mitausliefern
Die Zertifikatskette Erzeugung eines privaten Schlüssels Generierung einer Zertifikatsanfrage (CSR) CA signiert CSR und stellt Zertifikat aus Implementierung des Zertifikats Abbildung: Zertifikatskette vom Leaf Certificate bis zum Root Certificate im Trust Store des Webbrowsers
Erzeugung eines privaten Schlüssels Generierung einer Zertifikatsanfrage (CSR) CA signiert CSR und stellt Zertifikat aus Implementierung des Zertifikats Konfiguration einer TLS/SSL-Webseite Ein Beispiel für Apache 2.4 LoadModule ssl_module modules/mod_ssl.so Listen 443 <VirtualHost *:443> ServerName www.example.com SSLEngine on SSLCertificateFile "/path/to/www.example.com.cert" SSLCertificateChainFile "/usr/local/apache2/conf/ssl.crt/ca.crt" SSLCertificateKeyFile "/path/to/www.example.com.key" </VirtualHost> Quelle: https://httpd.apache.org/docs/2.4/
Erzeugung eines privaten Schlüssels Generierung einer Zertifikatsanfrage (CSR) CA signiert CSR und stellt Zertifikat aus Implementierung des Zertifikats Konfiguration einer TLS/SSL-Webseite Ein Beispiel für NGINX server { listen 443 ssl; server_name www.example.com ssl_certificate /path/to/www.example.com.cert ssl_certificate_key /path/to/www.example.com.key... } Quelle: http://nginx.org/en/docs/http/configuring_https_servers.html
Gefahr durch Man-In-The-Middle-Angriffe Schwachstelle im Design Gefahr durch Man-In-The-Middle-Angriffe Es ist Vorsicht geboten Obwohl TLS/SSL-Verschlüsselung implementiert wurde, sind Man-In-The-Middle-Angriffe weiterhin möglich.
Gefahr durch Man-In-The-Middle-Angriffe Schwachstelle im Design Gefahr durch Man-In-The-Middle-Angriffe Es ist Vorsicht geboten Obwohl TLS/SSL-Verschlüsselung implementiert wurde, sind Man-In-The-Middle-Angriffe weiterhin möglich. Denn der Webbrowser weiß nicht, ob TLS/SSL auf einer Webseite implementiert sind oder nicht.
Schwachstelle im Design Gefahr durch Man-In-The-Middle-Angriffe Schwachstelle im Design Es gibt hunderte von vertrauenswürdigen CAs, denen Browser und E-Mail-Clients vertrauen Jede dieser CAs kann Zertifikate für beliebige Domains ausstellen und die Browser und E-Mail-Clients vertrauen ihnen Man-In-The-Middle-Angriffe sind so auch auf HTTPS-Verbindungen möglich
HTTP Strict Transport Security Welchen Nutzen bietet HSTS? HTTP Strict Transport Security - RFC 6797 Public Key Pinning Extension for HTTP (HPKP) - RFC 7469 Dem Webbrowser wird mitgeteilt, dass eine Seite über HTTPS erreichbar ist Die URL wird transparent zu einer https-url umgeschrieben Der Webbrowser wird angewiesen, diese Seite ausschließlich über HTTPS aufzurufen
HTTP Strict Transport Security Wie implementiert man HSTS? HTTP Strict Transport Security - RFC 6797 Public Key Pinning Extension for HTTP (HPKP) - RFC 7469 <VirtualHost www.example.com:443> Header always set Strict-Transport-Security "max-age=63072000; \ includesubdomains;" </VirtualHost> server { listen 443 ssl; add_header Strict-Transport-Security "max-age=63072000; \ includesubdomains; "; }
HTTP Strict Transport Security Vor- und Nachteile von HSTS HTTP Strict Transport Security - RFC 6797 Public Key Pinning Extension for HTTP (HPKP) - RFC 7469 Vorteile Leicht zu konfigurieren Verhindert MITM-Angriffe auf HTTP-Verbindungen Nachteile Problematisch bei Mixed-Content MITM-Angriff mit gefälschtem TLS/SSL-Zertifikat weiterhin möglich
Pinning - Wie funktioniert das? HTTP Strict Transport Security - RFC 6797 Public Key Pinning Extension for HTTP (HPKP) - RFC 7469 Der öffentliche Schlüssel eines Zertifikats wird festgenagelt Ein Hash-Wert wird an den Browser übermittelt und von diesem gespeichert
Pinning - Wie funktioniert das? HTTP Strict Transport Security - RFC 6797 Public Key Pinning Extension for HTTP (HPKP) - RFC 7469 Der öffentliche Schlüssel eines Zertifikats wird festgenagelt Ein Hash-Wert wird an den Browser übermittelt und von diesem gespeichert Dadurch kann der Browser das Zertifikat wiedererkennen Stimmt der berechnete Hash nicht mit dem gespeicherten Wert überein, wird der Zugriff auf die Webseite verweigert
Implementierung von HPKP Vorüberlegungen HTTP Strict Transport Security - RFC 6797 Public Key Pinning Extension for HTTP (HPKP) - RFC 7469 Welcher öffentliche Schlüssel soll gepinnt werden?
Implementierung von HPKP Vorüberlegungen HTTP Strict Transport Security - RFC 6797 Public Key Pinning Extension for HTTP (HPKP) - RFC 7469 Welcher öffentliche Schlüssel soll gepinnt werden? Tipp: Pinnt das Serverzertifikat!
Implementierung von HPKP Vorüberlegungen HTTP Strict Transport Security - RFC 6797 Public Key Pinning Extension for HTTP (HPKP) - RFC 7469 Welcher öffentliche Schlüssel soll gepinnt werden? Tipp: Pinnt das Serverzertifikat! Was tun, wenn das Zertifikat kompromittiert wurde?
Implementierung von HPKP Vorüberlegungen HTTP Strict Transport Security - RFC 6797 Public Key Pinning Extension for HTTP (HPKP) - RFC 7469 Welcher öffentliche Schlüssel soll gepinnt werden? Tipp: Pinnt das Serverzertifikat! Was tun, wenn das Zertifikat kompromittiert wurde? Einen vorbereiteten Backup-PIN nutzen!
Implementierung von HPKP PINs berechnen HTTP Strict Transport Security - RFC 6797 Public Key Pinning Extension for HTTP (HPKP) - RFC 7469 openssl x509 -noout -in certificate.pem -pubkey openssl asn1parse \ -noout -inform pem - out public.key openssl dgst -sha256 -binary public.key openssl enc -base64 openssl req -noout -in example.com.csr -pubkey openssl asn1parse \ -noout -inform pem -out example.com_csr.key openssl dgst -sha256 -binary example.com_csr.key \ openssl enc -base64
HTTP Strict Transport Security - RFC 6797 Public Key Pinning Extension for HTTP (HPKP) - RFC 7469 Implementierung von HPKP am Beispiel von NGINX server { listen 443 ssl; server_name www.example.com ssl_certificate /path/to/www.example.com.cert ssl_certificate_key /path/to/www.example.com.key add_header Public-Key-PINs pin-sha256="primary-pin"; \ pin-sha256="backup-pin"; max-age=300; includesubdomains ; }
HTTP Strict Transport Security - RFC 6797 Public Key Pinning Extension for HTTP (HPKP) - RFC 7469 Nutzen der Public Key Pinning Extension for HTTP (HPKP) Vorteile Kann MITM-Angriffe mit gefälschten Zertifikaten aufdecken Verhindert den Zugriff auf die betroffene Seite
HTTP Strict Transport Security - RFC 6797 Public Key Pinning Extension for HTTP (HPKP) - RFC 7469 Nutzen der Public Key Pinning Extension for HTTP (HPKP) Vorteile Kann MITM-Angriffe mit gefälschten Zertifikaten aufdecken Verhindert den Zugriff auf die betroffene Seite Nachteile Aufwendig zu implementieren Kann eine Webseite unerreichbar machen
Fazit Inhalt HTTP Strict Transport Security - RFC 6797 Public Key Pinning Extension for HTTP (HPKP) - RFC 7469 Mit HSTS und HPKP stehen wirksame Mittel zur Verfügung, um die Angriffsfläche auf HTTPS-Verbindungen zu verkleinern.
Fazit Inhalt HTTP Strict Transport Security - RFC 6797 Public Key Pinning Extension for HTTP (HPKP) - RFC 7469 Mit HSTS und HPKP stehen wirksame Mittel zur Verfügung, um die Angriffsfläche auf HTTPS-Verbindungen zu verkleinern. Weiterführende Informationen findet ihr im TLS-Kochbuch unter: https://www.my-it-brain.de/wordpress/ mein-tls-kochbuch/