TLS-Zertifikate

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:

Dieser Artikel ist größtenteils für alle Ubuntu-Versionen gültig.

Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:

  1. Ein Terminal öffnen

  2. Root-Rechte erlangen

  3. Einen Editor öffnen

Inhaltsverzeichnis
  1. Zertifikate
  2. offiziell gültiges Zertifikat
    1. Let's Encrypt
    2. andere CAs
      1. Privaten Schlüssel erzeugen
      2. CSR erzeugen
  3. privat signiertes Zertifikat
  4. selbstsigniertes Zertifikat
    1. Paket ssl-cert
  5. Links
    1. intern
    2. extern

Wiki/Icons/security.png Diese Anleitung beschreibt Möglichkeiten zur Erlangung eines SSL- oder auch TLS-Zertifikates samt der Erzeugung des zugehörigen privaten Schlüssels. Ziel ist meist, Inhalte von einem Webserver (z.B. Apache) verschlüsselt über das Internet öffnen zu können.

Zertifikate

Es gibt drei unterschiedliche Arten von Zertifikaten:

Für die Stärke bzw. Sicherheit der Verschlüsselung ist das gewählte Verfahren völlig 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 selbstsignierte 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 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. Die eigentliche "Bestellung" erfolgt nach der Installation des sogenannten certbot auf dem Webserver weitgehend automatisiert und ist in wenigen Minuten erledigt.

Die offizielle Webseite https://certbot.eff.org 🇬🇧 führt nach der Auswahl des Betriebssystems durch eine sehr einfache und nachvollziehbare Schritt-für-Schritt-Anleitung (nur auf englisch verfügbar). Das Zertifikat ist nach der Ausstellung zunächst für drei Monate gültig. Die Verlängerung erfolgt wieder vom Webserver aus, ist kostenfrei und wird ebenfalls auf der Certbot-Seite erklärt.

Alternativ kann die Einrichtung via getSSL erfolgen. Hierfür gibt es ein 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 und gespeichert werden 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.

Quelle: Beitrag in c't 12/2014 🇩🇪

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 [1][2] 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.

Kryptografie mit elliptischen Kurven

Als Schlüsselformat werden neben herkömmlichen RSA-Schlüsseln sogenannte EC-Schlüssel (elliptic curve = Elliptische Kurve 🇩🇪) unterstützt, welche mit dem Kommando

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

erzeugt werden können. Mit -name secp224r1 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.

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 (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 in 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 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.

intern

extern