Benutzer-Werkzeuge

Webseiten-Werkzeuge


Seitenleiste

Was fehlt?

Es liegt in der Natur der Sache: Ein Wiki ist niemals fertig. Wir geben uns große Mühe, mit der Entwicklung Schritt zu halten; lassen Supportanfragen direkt in neue Artikel einfließen … aber auch wir sind nicht perfekt. Wenn du hier nicht fündig wirst: Nicht schmollen - Bescheid sagen! Unter hallo@uberspace.de steht dir unser Team gerne bereit. Hand drauf!

webserver:https
Alle Anleitungen in diesem Wiki beziehen sich auf Uberspace 6. Die Dokumentation für U7 findest du im neuen Manual.

Wir empfehlen dir ausdrücklich, von HTTPS Gebrauch zu machen. Insbesondere, wenn du „administrative“ Tätigkeiten durchführst, z.B. das Konfigurationsinterface deines Shops oder deines Blogs aufrufst, sollte das grundsätzlich nur per HTTPS geschehen, da hierbei sensible Daten durchs Internet übertragen werden. Mit der breiten Verfügbarkeit von Let's Encrypt gibt es keine Ausrede mehr, deine Webseiten unverschlüsselt verfügbar zu machen.

Wenn auch du das für eine gute Idee hältst und deinen Besuchern die Entscheidung abnehmen möchtest, ob sie HTTP oder HTTPS nutzen sollen: Wie du HTTPS erzwingen und andere sicherheitsrelevante Header setzen kannst, beschreiben wir im Artikel Webserver security.

unsere TLS-Zertifikate

Wir setzen auf unseren Hosting-Servern Wildcard-TLS-Zertifikate ein, die auf den Namen *.servername.uberspace.de ausgestellt sind. Liegt dein Uberspace wiebke also auf unserem Server amnesia, so wird dein Uberspace über unser Zertifikat für *.amnesia.uberspace.de mit abgedeckt - im Klartext heißt das, dass dein Uberspace dann unter der Adresse https://wiebke.amnesia.uberspace.de/ ohne Warnmeldung in allen gängigen Browsern abrufbar ist.

eigene TLS-Zertifikate

Du hast eigene Domains aufgeschaltet und passende TLS-Zertifikate? Sehr gut! Du kannst diese problemlos mit deinem Uberspace nutzen. In der Anzahl der Zertifikate bist du nicht beschränkt, du kannst so viele Zertifikate importieren, wie du brauchst. Hier erfährst du, wie du deine Zertifikate importieren kannst.

Wenn du noch keine eigenen Zertifikate hast, wie wäre es denn mit kostenlosen von Let's Encrypt?

Let's-Encrypt-Zertifikate

Let's Encrypt ist eine Initiative, die kostenlos und automatisiert Zertifikate ausstellt, die z.B. für HTTPS nutzbar sind.

Let's Encrypt unterstützt zwar prinzipiell Wildcard-Zertifikate, allerdings erfordern diese zwingend DNS-Validierung und sind daher auf einem Uberspace nicht automatisiert einsetzbar.

Wir machen es dir so einfach wie möglich: Mit dem Befehl uberspace-letsencrypt kannst du dir eine Konfiguration mit all deinen aufgeschalteten Domains anlegen, die die Nutzung des offiziellen letsencrypt-Kommandozeilenclients ohne Root-Rechte ermöglicht:

[julia@amnesia ~]$ uberspace-letsencrypt 

We have now created the following config file for you:

  /home/julia/.config/letsencrypt/cli.ini

Please review especially the domain list we have generated for you
and adapt the 'domains' setting if you want to make some changes:

  www.domain1.tld
  domain1.tld
  domain2.tld

When you're done you can use the official Let's Encrypt client by executing:

  letsencrypt certonly

You can safely ignore all 'Root (sudo) is required to run most of letsencrypt functionality' warnings.

Anschließend kannst du mit dem Befehl letsencrypt certonly automatisch Keys generieren und Zertifikate ausstellen lassen. Wichtig ist, dass die DNS-Records stimmen und alle Domains auch auf deinen Uberspace zeigen:

[julia@amnesia ~]$ letsencrypt certonly
[...]
IMPORTANT NOTES:
 - If you lose your account credentials, you can recover through e-mails sent to julia@amnesia.uberspace.de.
 - Congratulations! Your certificate and chain have been saved at /home/julia/.config/letsencrypt/live/www.domain1.tld/fullchain.pem.
   Your cert will expire on 2016-03-03. To obtain a new version of the certificate in the future, simply run Let's Encrypt again.
 - Your account credentials have been saved in your Let's Encrypt configuration directory at /home/julia/.config/letsencrypt. You should make a secure backup of this folder now. This configuration directory will also contain certificates and private keys obtained by Let's Encrypt so making regular backups of this folder is ideal.

Et voilà: Dein Zertifikat wurde erstellt und mit dem passenden Key unter /home/julia/.config/letsencrypt/live/www.domain1.tld/ abgelegt:

[julia@amnesia ~]$ ls -la /home/julia/.config/letsencrypt/live/www.domain1.tld/
total 8
drwxr-xr-x 2 julia julia 4096 Feb  3 15:47 .
drwx------ 3 julia julia 4096 Feb  3 15:47 ..
lrwxrwxrwx 1 julia julia   37 Feb  3 15:47 cert.pem -> ../../archive/www.domain1.tld/cert1.pem
lrwxrwxrwx 1 julia julia   38 Feb  3 15:47 chain.pem -> ../../archive/www.domain1.tld/chain1.pem
lrwxrwxrwx 1 julia julia   42 Feb  3 15:47 fullchain.pem -> ../../archive/www.domain1.tld/fullchain1.pem
lrwxrwxrwx 1 julia julia   40 Feb  3 15:47 privkey.pem -> ../../archive/www.domain1.tld/privkey1.pem
Bis jetzt hast du das Zertifikat nur erstellt, nicht aber eingebunden! Damit das Zertifikat auch tatsächlich vom Webserver verwendet wird, lies dir noch den Punkt Importieren weiter unten durch.

Übrigens ist dieses Zertifikat für alle oben angegebenen Domains gültig, du bekommst also nicht ein Zertifikat pro Domain, sondern ein Zertifikat, welches für alle Domains gültig ist:

[julia@amnesia ~]$ cert-info --file /home/julia/.config/letsencrypt/live/www.domain1.tld/fullchain.pem --alt
www.domain1.tld
domain1.tld
domain2.tld
Let's Encrypt selbst wird 15 Tage vor Ablauf eines Zertifikates beginnen, Dich via Mail mehrfach zu warnen, dass Dein erstelltes Zertifikat bald abläuft. Das passiert unabhängig davon, ob Du bereits ein neues erstellt und hinterlegt hast. Entsprechende Mails von expiry@letsencrypt.org sind also kein Anlass zur Sorge, wenn uberspace-list-certificates bereits ein späteres Ablaufdatum für des Zertifikat anzeigt.

Importieren

Deine Zertifikate - ob nun von Let's Encrypt oder einem anderen Anbieter - kannst du mit uberspace-add-certificate importieren. Sollte es sich um ein Zertifikat eines externen Anbieters handeln, lade sowohl den privaten Schlüssel als auch das zugehörige TLS-Zertifikat per SSH/SFTP auf deinen Uberspace hoch, und zwar direkt in dein Home-Verzeichnis ~/ oder einem dort für die Dateien extra angelegten Unterverzeichnis. Lade die Dateien keinesfalls in deinen DocumentRoot /var/www/virtual/$USER hoch, da sie dort potentiell von jedem mitgelesen werden könnten und damit wertlos wären. Im Fall von Let's Encrypt befinden sich die notwendigen Dateien natürlich schon auf deinem Uberspace.

Unser Script überprüft das Zertifikat und importiert - wenn alles klappt - das Zertifikat in unsere HTTPS-Frontend-Konfiguration. Mit dem Schalter –help gibt uberspace-add-certificate darüber Auskunft wie es benutzt werden möchte:

[wiebke@amnesia ~]$ uberspace-add-certificate --help
Usage: uberspace-add-certificate [options]

This shell script adds a TLS certificate to the webserver configuration.

Go to https://wiki.uberspace.de/webserver:https for more info.

Options:
 
  --help                    This help message.

  -k <key file>             🔑  Key file for the certificate.
                            Will be decrypted if encrypted.

  -c <certificate file>     📝  Certificate file. 

Also bei Zertifikaten von Let's Encrypt z.B. so:

[julia@amnesia ~]$ uberspace-add-certificate -k ~/.config/letsencrypt/live/www.domain1.tld/privkey.pem -c ~/.config/letsencrypt/live/www.domain1.tld/cert.pem
🔑  Found key... 
📝  Found certificate...
🔑  Key seems valid, moving on...
📝  Certificate seems valid, moving on... (step by step)
🔐  Certificate matches key, moving on... (we're getting there!)
📜  Magically getting intermediate certificate(s) if there are any needed... (hold on tight)
🔐  Checking for www.domain1.tld.
🌍  temporary webserver started...
✅  certificate is valid.
🌍  killed temporary webserver...
🚀  All good! Your new certificate will be live within the next five minutes.
Sollte das Script stattdessen Chain verification output: Not verified. The certificate is NOT trusted. The certificate issuer is unknown. zurück geben, versuche es bitte ein zweites Mal. Dieser Fehler kommt durch Timeouts bei Let's Encrypt zustande und ist in der Regel nur von kurzer Dauer.

Wenn die Ausgabe so aussieht: Bestens. Du brauchst dich um nichts weiter zu kümmern. Wenn das Zertifikat nicht importiert werden konnte, gibt dir das Skript Informationen aus, mit denen du dich per Mail an uns wenden kannst. Wir importieren nur Zertifikate, die gegen das ''ca-bundle'' von CentOS validieren.

Automatisieren von Let's Encrypt

Da Let's Encrypt-Zertifikate spätestens alle 90 Tage erneuert werden müssen, bietet es sich an, diesen Vorgang zu automatisieren. Dafür stellen wir uberspace-letsencrypt-renew zur Verfügung, welches einfach mittels Crontab einmal täglich angestoßen werden kann. Du musst dafür lediglich folgendes in Deine Crontab kopieren:

@daily /usr/local/bin/uberspace-letsencrypt-renew

Das Skript prüft so einmal täglich die Restlaufzeit des vorhandenen Zertifikates und sobald 21 Tage Restlaufzeit unterschritten wurden, sorgt es für frische Zertifikate, importiert diese und Du bekommst nur dann eine Mail. Diese enthält den stdrr, also die Ausgabe die sonst auf der Shell gelandet wäre, so Du es in der Crontab nicht explizit anders festgelegt hast. Sollte eine dieser gemailten Ausgaben einmal nicht auf 🚀 All good! Your new certificate will be live within the next five minutes enden, kannst Du außerdem das Script manuell mit der Option -f ausführen um es sofort nochmal zu probieren:

[julia@amnesia ~]$ uberspace-letsencrypt-renew -f 

Änderungen am Let's Encrypt Zertifikat

Bei Dir sind (Sub-)Domains hinzugekommen oder weggefallen und das Zertifikat muss entsprechend angepasst werden? Kein Problem! Öffne einfach die ~/.config/letsencrypt/cli.ini mit einem Editor Deiner Wahl, trage in der Zeile mit den Domains die gewünschte ein (komma-getrennt) oder aus und führe anschließend wieder uberspace-letsencrypt-renew -f aus. Das fordert neue Zertifikate an, importiert sie und räumt die Alten weg, alles in einem Abwasch.

Anzeigen

Um dir anzeigen zu lassen, welche Zertifikate aktuell für deinen Uberspace aktiv sind, kannst du uberspace-list-certificates nutzen. Das Skript zeigt dir auch an, für welche Domains die Zertifikate noch gültig sind (also die alternative names), wann es abläuft und wann es entfernt wird. Das kann dann z.B. so aussehen:

[wiebke@amnesia ~]$ uberspace-list-certificates 
common name: wiebke.org
issuer: Let's Encrypt Authority X1
valid until: 2016-04-24 15:18:00 CEST
will be removed in 85 days.
alternative name: www.wiebke.org
alternative name: blog.wiebke.org

Das Zertifikat ist also nicht nur für wiebke.org, sondern auch für www.wiebke.org und blog.wiebke.org gültig.

Entfernen

Wir entfernen Zertifikate, die nicht mehr gültig sind, automatisch und schicken dir eine Mail an deine primäre E-Mail-Adresse. Solltest du ein Zertifikat selbst vor Ablauf der Gültigkeitszeit entfernen wollen, so ist auch das kein Problem. uberspace-del-certificate ist dein Freund und Helfer und auch dieses Skript gibt mit –help Auskunft über die Bedienung:

[wiebke@amnesia ~]$ uberspace-del-certificate --help
Usage: uberspace-del-certificate [options]

This shell script removes a certificate with a given common name
from the configuration. 

Go to https://wiki.uberspace.de/webserver:https for more info.

Options:
 
  --help            This help message.

  -c <common name>  📝  common name of the certificate to remove.

List existing certificates with 

  $ uberspace-list-certificates

Möchtest du also das Zertifikat, welches für wiebke.org ausgestellt wurde, entfernen, so ginge das folgendermaßen:

 
[wiebke@amnesia ~]$ uberspace-del-certificate -c wiebke.org
📝  removing certificate for wiebke.org...
The webserver's configuration is adapted; it will get active within at most 5 minutes.
Wildcard Zertifikate kannst du mit uberspace-del-certificate -c wildcard.domain.tld entfernen.

Technische Hintergründe

  • Unsere Software unterstützt keine ECDSA-Zertifikate.
  • DSA-Zertifkate werden zwar unterstützt, gelten aber derzeit wegen der Limitierung auf 1024 Bit Schlüssellänge als unsicher, wir raten davon ab.
  • Bei RSA-Zertifikaten empfehlen wir Schlüssellängen von mindestens 2048 Bit oder höher. (Wir selbst stellen schon auf 4096 Bit um.)
  • Um die Zwischenzertifikate kümmern wir uns.
  • Privater Schlüssel und das Zertifikat müssen im PEM-Format vorliegen. (Wenn du dir hier nicht sicher bist, liegen deine Daten vermutlich im PEM-Format vor ☺️)
  • In diesem Blogpost zum Zertifikatsimport gehen wir genauer auf das wieso, weshalb, warum ein und erläutern, wie wir den Zertifikatsimport technisch realisiert haben.
  • In unserem Blogpost zu Let's Encrypt findest du mehr Informationen und Hintergründe zu uberspace-letsencrypt und letsencrypt certonly.
  • Let's Encrypt überprüft die Gültigkeit von Top-Level-Domains an Hand der Public Suffix List. Wir sind da etwas weniger streng und erlauben beispielsweise die TLDs der OpenNIC Initiative, .onion und noch einige mehr. Diese kannst du nicht mit Let's Encrypt verwenden.
  • In der Vergangenheit haben wir auch Zertifikate importiert, die nicht gegen das ca-bundle von CentOS validieren, z.B. von CAcert oder selbst signierte Zertifikate. Mit dem Start von Let's Encrypt sind valide Zertifikate für jeden kostenlos verfügbar geworden, sodass wir keinen Grund mehr sehen, an dieser Praxis fest zu halten.
webserver/https.txt · Zuletzt geändert: 2018/05/03 08:55 von uber