Antifrust - TIPP zu Beginn:
Momentan ist der letsencrypt-client noch nicht in den Paketquellen von Ubuntu enthalten, daher muss man ihn manuell herunterladen und installieren.
Vorgehen:
#apt-get install git
#cd /opt #git clone https://github.com/letsencrypt/letsencrypt #cd letsencrypt/
Als nächstes müssen ggf. eventuelle Abhängigkeiten (python-module) nachinstalliert werden (dies erledigt der letsencrypt-wrapper beim ersten Aufruf automatisch) und danach das initiale Zertifikat erzeugt werden; das passiert alles mit einem Befehl! Zuvor muss der apache kurz angehalten werden.
#service apache2 stop #./letsencrypt-auto certonly --renew-by-default --standalone --standalone-supported-challenges tls-sni-01 --email <ADMINISTRATORADRESSE> -d <DOMAINNAMEN> # service apache2 start
Beispiel für die Einrichtungszeile:
#./letsencrypt-auto certonly --renew-by-default --standalone --standalone-supported-challenges tls-sni-01 --email administrator@meineschule.de -d server.meineschule.de
Die Option –standalone-supported-challenges tls-sni-01
sorgt dafür, dass die ganze Aushandlung über den https-Port 443 läuft. Das ist wichtig, da die meisten von uns hoffentlich im IPFire den Standartport 80 dicht gemacht haben.
Sollen die Zertifikate mit einem längeren RSA-Schlüssel erstellt werden, so kann in o.g. Befehlszeile die Option
--rsa-key-size 4096
angegeben werden. Ohne diese Angabe wird der Schlüssel mit 2048 Bit erstellt, so dass die Schlüssellänge somit deroppelt wird.
Sollen weitere Subdomains oder weitere Domains angegeben werden, so kann o.g. Befehlszeile erweitert werden:
-d meinedomain.de -d erstesubdomain.meinedomain.de -d zweitesubdomain.meinedomain.de -d zweitedomain.de
Das erstellte Zertifikat befindet sich jetzt in /etc/letsencrypt/live/<DOMAINNAMEN>/
Der Pfad zum neuen Zertifikat muss in /etc/apache2/sites-available/default
eingetragen werden. Dazu werden die zwei „originalen Zeilen“ kommentiert und drei neue Zeilen mit dem Pfad zum neuen Zertifikat hinzugefügt:
--Schnipp-- SSLEngine on # SSLCertificateFile /etc/ssl/private/server.pem # SSLCertificateKeyFile /etc/ssl/private/server.pem SSLCertificateFile /etc/letsencrypt/live/<DOMAINNAMEN>/cert.pem SSLCertificateChainFile /etc/letsencrypt/live/<DOMAINNAMEN>/chain.pem SSLCertificateKeyFile /etc/letsencrypt/live/<DOMAINNAMEN>/privkey.pem --Schnapp--
Danach den apache neustarten. Alle extern erreichbaren Seiten (MRBS, Portfolio, etc.) sollten nun das Zertifikat von LetsEncrypt „benutzen“.
Bemerkung: Ich habe das originale Zertifikat server.pem in server-orig.pem umbenannt und in /etc/apache2/sites-avialable/schulkonsole
eingetragen, da ich da kein signiertes Zertifikat brauche.
Sollten weitere vHosts definiert sein, so sind o.g Zeilen auch in diesen Konfigurationszeilen einzutragen und der Webserver ist neu zu starten.
Neustart des Apache Webserver:
service apache2 restart
Um zu kontrollieren, welche vHosts aktiviert sind:
ls -alh /etc/apache2/sites-enabled
Ist der gewünschte vHost dort nciht zu finden, ist unter /etc/apache2/sites-available eine entsprechende Konfigurationsdatei zu erstellen und danch ist diese zu aktivieren:
a2ensite meinesite.de
Soll bei Aufruf der Site im Browser immer die gesicherte Verbindung genutzt werden, so ist in der Apache-Konfiguration noch ein Redirect auf die HTTPS-Seite anzugeben - <VirtualHost *:80>;
# redirect port 80 access to ssl access via port 443 # apache mod rewrite has to be enabled RewriteEngine On RewriteCond %{HTTPS} !=on RewriteRule ^/(.*) https://%{SERVER_NAME}%{REQUEST_URI} [L,QSA,R=permanent]
Manchmal ist es notwendig, im Ldap signierte TLS-Zertifikate zu verwenden. Beispielsweise ist das Voraussetzung für die Authentifizierung gegen Webuntis.
Die Umstellung des ldap auf signierte Zertifikate, die an einem anderen Ort liegen und einen anderen Namen als server.pem haben ist alles andere als trivial, da zahlreiche Sicherheitsmechanismen z.B. appamor von Ubuntu dies verhindern. Am besten ist also, dass man einfach alles möglichst so lässt, wie es vorkonfiguriert ist.
Als erstes sichert man das originale Zertifikat:
#service slapd stop #mv /etc/ssl/private/server.pem /etc/ssl/private/server.pem.orig
Im zweiten Schritt „baut“ man das neue Zertifikat zusammen, dabei ist die richtige Reihenfolge entscheidend:
#cd /etc/letsencrypt/live/<DOMAINNAMEN>/ #cat privkey.pem >> server.pem #cat cert.pem >> server.pem #cat chain.pem >> server.pem
schiebt es an die richtige Stelle und passt die Rechte an:
#mv server.pem /etc/ssl/private/ #chown root:ssl-cert /etc/ssl/private/server.pem #chmod 640 /etc/ssl/private/server.pem #service slapd start
Das sollte es gewesen sein! Nun testen, ob die Authentifizierung klappt…
Das Zertifikat von LetsEncrypt ist für 90 Tage gültig. Folgendes Skript sorgt durch einen passenden Cronjob ausgeführt für die automatische Erneuerung:
#!/bin/sh #service apache2 stop #cd /opt/letsencrypt #./letsencrypt-auto certonly --renew-by-default --standalone --standalone-supported-challenges tls-sni-01 --email <ADMIN-MAILADRESSE> -d <DOMAINNAMEN> #service apache2 start
Der Eintrag in der Crontab könnte so aussehen, damit alle 85 Tage die Zertifikate erneuert werden:
* * */85 * * /opt/letsencrypt/zertifikate_erneuern_letsencrypt.sh
Darauf achten, dass das Skript die Ausführungsberechtigung besitzt (chmod +x).
Hier ist man fertig, falls das Zertifikat nur für den Webserver benutzt wird.
Für Ldap geht es so weiter:
#cd /etc/letsencrypt/live/<DOMAINNAMEN> #cat privkey.pem >> server.pem #cat cert.pem >> server.pem #cat chain.pem >> server.pem #service slapd stop #mv /etc/ssl/private/server.pem /etc/ssl/private/server.pem.before.letsencrypt #mv server.pem /etc/ssl/private/ #cd /etc/ssl/private #chown root:ssl-cert server.pem #chmod 640 server.pem #service slapd start