TLS-Zertifikat
Diese Anleitung beschreibt 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. Sicherheit 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
- Näheres hierzu im Artikel certbot
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 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
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
Kryptografie mit elliptischen Kurven
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
Links
intern
- 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
extern
- [wikipedia:SSL-Verschlüsselung: SSL-Verschlüsselung]
- certbot.eff.org - Kostenlose Zertifikate von Let's Encrypt
- How to get free SSL certificates on Ubuntu with Let's Encrypt - Gratis TLS-Zertifikate von Let's Encrypt
- Let's Encrypt mit getssl
- SSL Server Test - Online-Prüfung, Qualys SSL Labs
- [github:nabla-c0d3/sslyze:SSLyze] - umfangreiche Testsuite für SSL-Server
- Applied Crypto Hardening {dl} - möglichst sichere TLS-Konfiguration (PDF)
- TLS/SSL-Kochbuch -- Rezepte für die Verwendung von OpenSSL, HSTS und HPKP