|
|
Zeile 11: |
Zeile 11: |
|
| |
|
| = TMP = | | = TMP = |
| 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
| |
| * [[#selbstsigniertes-Zertifikat|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 [https://letsencrypt.org 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, 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
| |
|
| |
| ===== 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 == | | == Links == |
| === Intern === | | === Intern === |