Wer einen Webserver betreibt wird es vielleicht kennen: Man erstellt eine „site“ mit dem Apache2, um seine Website verbinden zu können – per http. Allein der Aufruf dieser Seite ist mit modernen Webbrowsern schon kaum noch möglich, aus Sicherheitsgründen. Also direkt mal ein SSL Zertifikat nachschieben:
sudo certbot --apache
Und schwupps: hat man statt einer apache-config schon zwei: eine für HTTP und eine für HTTPS. Unschön und etwas umständlich.
Schlimmer kann man es aber ohne Weiteres auch noch machen: Pro Subdomain benötigt man auch noch eine weitere Site – mit eigenem Let’s-Encrypt Zertifikat ist man dann schon bei 2 Zertifikaten und 4 Configs.
Das geht einfacher: Ich mache es so, dass ich pro Website (oder Subdomain) nur noch eine Konfig habe, für HTTP sowie HTTPS gemeinsam. Dazu ein Multidomainzertifikat, das alle Subdomains abdeckt, die ich verwenden will. Da ich die Websites selbst verwalte ist die gemeinsame Verwendung kein Problem:
sudo certbot --apache -d bar.com -d www.bar.com -d foo.bar.com
Meine Site-Config deckt nicht nur HTTP und HTTPS ab, sondern für die Generation 40+ auch noch die www-Subdomains, die man früher nutzte, um eine Website als solche zu kennzeichnen..
Den HTTP Teil kann man recht einfach umleiten:
<VirtualHost *:80>
ServerName foo.de
ServerAlias www.foo.de
Redirect permanent / https://foo.de/
</VirtualHost>
Im HTTPS-Teil muss ich noch eine Rewrite-Regel erstellen, damit www ebenfalls entfernt wird:
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerName foo.de
ServerAlias www.foo.de
ServerAdmin florian@foo.de
# SSL Zertifikate
SSLCertificateFile /etc/letsencrypt/live/foo.de/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/foo.de/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
DocumentRoot /var/www/html
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [L,R=301]
</VirtualHost>
</IfModule>
Nun fehlt nur noch die Erneuerung der Zertifikate. Dazu machen wir einen Eintrag in die crontab:
crontab -e
In die Datei fügen wir ein:
0 */12 * * * certbot renew --quiet
Damit prüfen wir alle 12 Stunden, ob das Zertifikat erneuert werden muss und wenn ja, tun wir das.
Eine Übersiche der aktuellen Zertifikate, Ihrer Gültigkeitsdauer und dem Umfang (welche Domains abgedeckt sind, kann man sich mit folgendem Befehl anzeigen lassen:
certbot certificates
Damit haben wir die Config etwas vereinfacht, aber dennoch abgesichert. Sim sala bim, und dreimal schwarzer Kater.