Tutorial: Apache & Let’s Encrypt für SSL-Schutz
Let’s Encrypt ist eine gemeinnützige Organisation, die kostenlose SSL-Zertifikate ausstellt. Mittlerweile nutzt eine große Anzahl an Websites die kostenlosen Zertifikate von Let’s Encrypt.
Dieser Artikel beschreibt die Installation von Let’s Encrypt auf dem eigenem Apache-Webserver mit Ubuntu 18.04 LTS (Bionic Beaver). Bei anderen Ubuntu- oder Debian-Versionen funktioniert die Installation ähnlich.
Inhaltsverzeichnis
Empfehlung – Domains per Virtual Host anlegen
SSL-Zertifikate von Let’s Encrypt können ausschließlich für Domains und Subdomains vergeben werden. Die IP-Adresse eures eigenen Servers mittels SSL-Zertifikat von Let’s Encrypt zu schützen ist nicht möglich.
Damit das Beziehen des SSL-Zertifikats ideal funktioniert, empfiehlt es sich die genutzten Domains in der Apache-Config zu definieren. Dies ist insbesondere notwendig, wenn ihr verschiedene Domains oder Subdomains mit eurem Webserver betreiben möchtet. Details dazu findet ihr in diesem Artikel: Tutorial: Apache Domains & Virtual Hosts anlegen.
Die notwendigen Befehle für das anlegen einer neuen Domain für Apache sehen wie folgt aus:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
# VirtualHost für Domain erstellen (falls noch nicht passiert) # Ersetzt eure-url.de durch die genutzte URL. # Per export DOMAIN setzen wir eine Umgebungsvariable, die wir später per $DOMAIN nutzen können export DOMAIN=eure-url.de # Schritt 1 - Verzeichnis erstellen und Rechte anpassen sudo mkdir /var/www/$DOMAIN sudo chown -R www-data:www-data /var/www/$DOMAIN # Schritt 2 - Apache Config-Datei für domain.de erstellen printf " <VirtualHost *:80> ServerAdmin admin@$DOMAIN ServerName $DOMAIN ServerAlias www.$DOMAIN DocumentRoot /var/www/$DOMAIN ErrorLog \${APACHE_LOG_DIR}/error.log CustomLog \${APACHE_LOG_DIR}/access.log combined </VirtualHost>" | sudo tee /etc/apache2/sites-available/$DOMAIN.conf # Schritt 3 - VirtualHost Konfiguration für Domain aktivieren sudo a2ensite $DOMAIN.conf sudo systemctl reload apache2 |
Express-Setup – Alle Befehle im Überblick
Nachfolgend alle Befehle im Überblick um per Let’s Encrypt SSL-Zertifikate kostenlos zu beziehen. Dabei wird ein Apache-Webserver verwendet.
1 2 3 4 5 6 7 8 9 10 |
# Schritt 1 - Let's Encrypt certbot installieren sudo add-apt-repository ppa:certbot/certbot sudo apt -y install python-certbot-apache #Schritt 2 - SSL-Zertifikate für eure-domain.de und www.eure-domain.de beziehen sudo certbot --apache -d eure-domain.de -d www.eure-domain.de #Schritt 3 - Falls UFW Firewall genutzt wird: https-Traffic erlauben sudo ufw allow https |
Schritt 1 – Let’s Encrypt Certbot installieren
Certbot ist ein kleine Programm, um SSL-Zertifikate zu beziehen. Ebenso kümmert es sich um die rechtzeitige Verlängerung der Zertifikate. Ihr könnt dieses wie folgt installieren:
1 2 |
sudo add-apt-repository ppa:certbot/certbot sudo apt -y install python-certbot-apache |
Schritt 2 – SSL-Zertifikate für Domains beziehen
Anschließend könnt ihr für eure Domain wie folgt SSL-Zertifikate beziehen. Wichtig ist, dass der Nameserver-Eintrag eurer Domain auf die IP des Servers bereits verweist.
1 |
sudo certbot --apache -d eure-domain.de -d www.eure-domain.de |
Dieser Befehl bezieht zwei Zertifikate für die Domains eure-domain.de und www.eure-domain.de.
Sofern ihr die Domains per Virtual Host korrekt angelegt habt, sollte der Befehl ohne Probleme durchlaufen. Falls ihr keine Virtual Hosts mit entsprechendem Servernamen erstellt habt, bekommt ihr unter Umständen folgende Frage:
1 2 3 4 5 6 7 |
We were unable to find a vhost with a ServerName or Address of www.eure-domain.de. Which virtual host would you like to choose? (note: conf files with multiple vhosts are not yet supported) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1: 000-default.conf | | | Enabled 2: 000-default-le-ssl.conf | eure-domain.de | HTTPS | Enabled - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
Dies liegt daran, dass für Let’s Encrypt nicht klar ist, wohin www.eure-domain.de verweisen soll. Bei diesem Dialog müsst ihr 2: 000-default-le-ssl.conf auswählen, damit das Zertifikat korrekt installiert wird.
Schritt 3 – https-Traffic erlauben und SSL-Schutz testen
Sofern ihr die Firewall UFW verwendet, müsst ihr den https-Traffic zu eurem Server noch erlauben:
1 |
sudo ufw allow https |
Anschließend könnt ihr https://eure-domain.de und https://www.eure-domain.de aufrufen und ihr solltet ein gültiges SSL-Zertifikat sehen.
Schritt 4 – Zertifikatsverlängerung
Die SSL-Zertifikate von Let’s Encrypt sind nur 90 Tage gültig. Die certbot-Anwendung hat allerdings einen cronjob unter /etc/cron.d angelegt, welches zwei mal am Tag die verbleibende Gültigkeit eurer Zertifikate überprüft. 30 Tage vor Ablauf der Gültigkeit wird automatisch ein neues SSL-Zertifikat bezogen.
Um die Zertifikatsverlängerung zu testen, könnt ihr folgenden Befehl ausführen:
1 |
sudo certbot renew --dry-run |