TLS-Zertifikat

Aus Foxwiki

topic - Beschreibung

Beschreibung

Möglichkeiten zur Erlangung eines [wikipedia:SSL-Verschlüsselung: SSL]- oder auch [wikipedia:Transport_Layer_Security: TLS]-Zertifikates samt der Erzeugung des zugehörigen privaten Schlüssels

  • Ziel ist meist, Inhalte von einem Webserver (z. B. [[Apache/mod_ssl:Apache]) verschlüsselt über das Internet öffnen zu können

Zertifikate

Es gibt drei unterschiedliche Arten von Zertifikaten

Öffentlich signierte Zertifikate Offiziell gültiges Zertifikat, das über eine öffentliche CA signiert wurde
Privat signierte Zertifikate Über eine private (nicht öffentliche) CA signiert
Selbst signierte Zertifikate Signiert durch den eigenen privaten Schlüssel, nicht über eine CA

Für die Stärke bzw.  der Verschlüsselung ist das gewählte Verfahren irrelevant

Der Unterschied liegt aber darin, dass ein öffentlich gültiges Zertifikat von einer offiziellen Zertifizierungsstelle ("Certificate Authority", CA) "unterschrieben" werden muss und anschließend in der Regel von allen gängigen Programmen (z. B. Browsern) anstandslos als vertrauenswürdig akzeptiert wird - da diese ein übergeordnetes Zertifikat der CA enthalten

Umgekehrt lässt sich für selbst signierte Zertifikate nicht prüfen, ob dem Aussteller vertraut werden kann oder nicht, und es werden entsprechende Warnungen bzw. Sicherheitsabfragen angezeigt

Privat signierte Zertifikate werden nur dann als vertrauenswürdig akzeptiert, falls das Zertifikat der verwendeten CA [[CA#CAhinzufuegen:nachträglich auf dem Client-Rechner installiert] wurde

Offiziell gültiges Zertifikat

Um ein offiziell gültiges Zertifikat zu erhalten, muss man im Besitz einer Domain sein

  • Für diese Domain wird das Zertifikat beantragt und ausgestellt
  • Bevor man ein Zertifikat erhält, wird diese Voraussetzung von der CA überprüft
  • Je nach CA und Typ des Zertifikats unterscheidet sich die Art dieser Überprüfung

Let's Encrypt

Eine sehr einfache und dazu kostenlose Variante, um mit Ubuntu an ein solches Zertifikat zu kommen, ist die Beantragung über die Zertifizierungsstelle Let's Encrypt

  • Voraussetzung für diese Methode ist, dass der Webserver bereits öffentliche HTTP-Anfragen auf die Domain beantwortet - es muss also unter anderem ein A-record im DNS existieren
  • Das Zertifikat ist nach der Ausstellung zunächst für drei Monate gültig
  • Die Verlängerung ist ebenfalls kostenlos und kann ganz einfach automatisiert werden

Die eigentliche "Bestellung" erfolgt über eines der Kommandozeilenprogramme direkt auf dem Webserver

certbot

Das Programm certbot vereinfacht die Erstellung und Administration von Let's Encrypt-Zertifikaten erheblich

getSSL

Alternativ kann die Einrichtung via getSSL erfolgen

  • Hierfür gibt es ein [[Howto/getssl: Howto] auf diesem Portal

andere CAs

Um ein Zertifikat von einer anderen CA anzufordern, muss ein "Certificate Signing Request" (CSR) erstellt werden

  • Voraussetzung hierfür ist wiederum ein privater Schlüssel

Privaten Schlüssel erzeugen

Der Schlüssel sollte immer auf eigens verwalteten Systemen erzeugt, gespeichert und niemals Dritten in die Hände gegeben werden - auch nicht der signierenden CA

Hinweis
Es gibt CAs, welche komplette Zertifikate inklusive privaten Schlüsseln selbst erstellen und diese z. T. sogar noch in ungesicherten E-Mails zusammen an den Empfänger verschicken
  • Um solche Anbieter sollte ein großer Bogen gemacht werden: Niemand kann garantieren, dass der private Schlüssel wirklich keinem Dritten in die Hände fällt, womit das komplette Vertrauensmodell und auch die Sicherheit der Verschlüsselung ausgehebelt werden

Im folgenden Beispiel soll der private Schlüssel als /etc/ssl/private/apache.key für den Apache Webserver erzeugt werden

  • Da normale Benutzer auf diesen Ordner keinen Zugriff haben, sollte zunächst ein Pseudo-Root-Terminal mittels
sudo -i

geöffnet werden

Der private Schlüssel wird nun mit dem folgenden Kommando erzeugt

openssl genrsa -out /etc/ssl/private/apache.key

Der private Schlüssel ist nicht durch eine Passphrase geschützt

  • Das ist notwendig, da Apache sonst bei jedem Neustart die manuelle Eingabe der Passphrase verlangen würde oder diese in der Konfiguration im Klartext hinterlegt werden müsste
Elliptischen Kurven Kryptografie

Als Schlüsselformat werden neben herkömmlichen RSA-Schlüsseln sogenannte EC-Schlüssel (elliptic curve = [wikipedia:Elliptische-Kurven-Kryptosystem:Elliptische Kurve]) unterstützt, welche mit dem Kommando

openssl ecparam -out /etc/ssl/private/apache.key -name secp521r1 -genkey"

erzeugt werden können

  • Mit `-name secp521r1` wird der zu verwendende Algorithmus (die zu verwendende Kurve, analog zur Länge für einen RSA-Schlüssel) festgelegt
  • Welche Kurven genutzt werden können, lässt sich mit dem Befehl
openssl ecparam -list_curves
abfragen
  • Aktuell sollten vorwiegend die Kurven `secp192r1`, `secp256k1`, `secp384r1` oder `secp521r1` verwendet werden, da diese in den meisten Standards vertreten sind und somit am weitesten verbreitet sein dürften
  • Schlüssel aus elliptischen Kurven können mit geringerer Länge eine gleich gute Sicherheit wie RSA-Schlüssel bieten und sind deswegen deutlich schneller

CSR erzeugen

Als nächstes kann nun der CSR erzeugt werden

  • Dieser beinhaltet keine sensiblen Daten und kann deshalb an einer beliebigen Stelle erstellt werden, wo man ihn später wieder findet
  • Im folgenden Beispiel wird der CSR im eigenen Heimatverzeichnis abgelegt
openssl req -new -key /etc/ssl/private/apache.key -out ~/apache.csr

Nach Bestätigen des Befehls mit der Eingabetaste werden noch einige Details zum Inhalt des Zertifikates abgefragt

  • Hier ist der Common Name am wichtigsten, denn hier muss der Domainname ([wikipedia:Domain_(Internet)#Fully_Qualified_Domain_Name_(FQDN): FQDN]) stehen, für welchen das Zertifikat eingesetzt werden soll (beispielsweise "meine-seite.de")

Wie mit dieser Datei zu verfahren ist, hängt von der jeweiligen CA ab und sollte auf deren Seiten erklärt sein

  • Es ist bspw. üblich, dass der Inhalt der CSR-Datei bei einer Zertifikatsbestellung in einem Browser-Fenster eingefügt werden muss
  • Nach erfolgreicher Verifizierung, dass man auch im Besitz der Domain ist, wird das Zertifikat ausgestellt
  • Dieses besteht - wie auch der private Schlüssel und der CSR - aus einer einfachen Text-Datei mit kryptischem Inhalt
Beispiel
-----BEGIN CERTIFICATE-----
MIIC5jCCAc6gAwIBAgIJALRqoODSYVNiMA0GCSqGSIb3DQEBCwUAMBwxGjAYBgNV
BAMMEWt1YnVudHUuZnJpdHouYm94MB4XDTE3MTEyNTE4MTIzNVoXDTI3MTEyMzE4
MTIzNVowHDEaMBgGA1UEAwwRa3VidW50dS5mcml0ei5ib3gwggEiMA0GCSqGSIb3
DQEBAQUAA4IOI5ISDLKHAoIBAQDTrT4T7vvmIhTLr/a+sQwogaUUCZbzqoeVytsz
GlCth3Y/P11zK3GVuwlX3ChMTkxUEYQ2ZavKVA1SHrthbUqOmbJp2zi5sDWxiJvp
IyFY4ydXuDwUlnFEMb9FfDSMLWno1N8V8ecNIKAhsqBTI9Dh9yGbBuyWnBEJqM32
tdTeciLKMK2I8ux96WoJtury6JqFAsfdwFsbwuNcGgqMT+FenN3LeI12qxoqyfX5
ZMGy2KGJNMYPyzo59LCBg0xvXrFKDgItO0c/5sDcWqNxiufp54JTiTAq0ZK6pWGY
I6RRamvSbMXqOb7qYRmkm8auENJLmCn5JCk65zwXAUScEqRzAgMBAAGjKzApMAkG
A1UdEwQCMAAwHAYDVR0RBBUwE4IRa3VidW50dS5mcml0ei5ib3gwDQYJKoZIhvcN
AQELBQADggEBAGmC7xH62zzJYE1EqqjK+aznHd1iT+90hnJyxqNaTgALUn6I4UFg
RIlUOmiqI9dgO9kcnfnbABSN4dEKWacgV9ZEH+4zatYJri4M7oxUi+PQ4kvY1Iw8
0MN5euI4IIwGXkUYJCG+WSqozDBA2oGcjsSfhrPYy658b05g1eTwaxyiKmQzGEqj
whBYbD1MOpsiG1Kj3xq4oeKCjI1oW0ZZcL0Y6bOGIpYlTuFbHzB5X14sEuX1lRnu
uHwkzHyKLHFwd450qmQzEpXE9+w3HhaJTJ3Qm5ta37HGuqjCFxJduliUOhtVPJyB
qoTOxB7DHESz7ICaLQAUUxhm3OG+Rea4FTo==
-----END CERTIFICATE-----

Die erste und letzte Zeile sind Teil der Zertifikatsdatei und dürfen nicht entfernt werden

  • Die Datei speichert man nun auf dem Server (z. B. unter /etc/ssl/certs/apache.crt)
  • Anschließend kann das Zertifikat vom Webserver eingebunden werden

Privat signiertes Zertifikat

Wer Zertifikate über eine eigene CA signieren will, findet eine entsprechende Anleitung im Artikel CA

Selbstsigniertes Zertifikat

Paket ssl-cert

Ein selbstsigniertes Zertifikat inkl. Schlüssel erhält man am schnellsten über das Paket ssl-cert

  • Eine sehr gute Anleitung dazu findet sich im [[ssl-cert: Wiki]

Selbstsignierte Zertifikate werden über entsprechende Warnhinweise prinzipiell als verdächtig bzw. unsicher eingestuft und der Client-Zugriff komplett blockiert

  • Daher müssen selbstsignierte Zertifikate erst im Browser heruntergeladen und über dauerhafte Ausnahmeregeln legitimiert werden


Anhang

Siehe auch

  • ssl-cert - selbstsignierte Zertifikate erstellen
  • CA - eigene Certification Authority betreiben
  • CAcert - Community, die kostenlose TLS-Zertifikate ausstellt
  • Apache/mod_ssl - Verwendung von TLS mit dem Webserver Apache
  • certspotter - Überwachung von SSL-Zertifikaten

Links

Weblinks
  1. https://wiki.ubuntuusers.de/TLS-Zertifikate/
  2. [wikipedia:SSL-Verschlüsselung: SSL-Verschlüsselung]
  3. certbot.eff.org - Kostenlose Zertifikate von Let's Encrypt
  4. How to get free SSL certificates on Ubuntu with Let's Encrypt - Gratis TLS-Zertifikate von Let's Encrypt
  5. Let's Encrypt mit getssl
  6. SSL Server Test - Online-Prüfung, Qualys SSL Labs
  7. [github:nabla-c0d3/sslyze:SSLyze] - umfangreiche Testsuite für SSL-Server
  8. Applied Crypto Hardening {dl} - möglichst sichere TLS-Konfiguration (PDF)
  9. TLS/SSL-Kochbuch -- Rezepte für die Verwendung von OpenSSL, HSTS und HPKP


TMP

Extern