Let’s Encrypt hat vor kurzem die öffentliche Beta Phase gestartet. Um das Abholen bzw. Einrichten eines SSL Zertifikates zu erleichtern habe ich dazu mal ein kleines Skript geschrieben. Let’s Encrypt setzt voraus dass eine gültige Domain vorhanden ist!
Die Zertifikate sind kostenlos und werden von allen gängigen Browsern erkannt.
Let’s Encrypt Client installieren
Let’s Encrypt Skript
#!/bin/bash
if [ -z $1 ] ; then
echo
echo "Domainname eingeben, z.B. $0 www.domain.de!!! Abbruch!!! "
echo
exit 1
else
domain=$1
fi
if ! which git > /dev/null ; then
apt-get update
apt-get -y install git
fi
cd
if ! [ -d letsencrypt ] ; then
git clone https://github.com/letsencrypt/letsencrypt
cd letsencrypt
./letsencrypt-auto
else
echo
echo "letsencrypt schon im Root Ordner vorhanden!!!"
echo
cd letsencrypt
fi
pfad=usr/share/nginx
echo "Auswahl, bitte Zahl eingeben:"
echo "1 = standalone"
echo "2 = webroot"
echo "3 = manual"
read -p "Eingabe: " OPTION
case $OPTION in
1)
./letsencrypt-auto certonly --standalone -d $domain
;;
2)
mkdir -p /$pfad/$domain/.well-known/acme-challenge
./letsencrypt-auto certonly --webroot -w /$pfad/$domain -d $domain
;;
3)
./letsencrypt-auto certonly --manual -d $domain
;;
*)
echo "Falsche Eingabe!!! Abbruch!!!"
exit 1
;;
esac
Schritt 1: Skript Downloaden
wget https://download.rootsvr2.de/letsgetencrypt
Schritt 2: Skript ausführbar machen
chmod +x letsgetencrypt
Was macht das Let’s Encrypt Skript?
- Prüft ob “git” installiert ist, installiert dieses wenn nicht vorhanden.
- Lädt Let’s Encrypt von github herunter und installiert die benötigten Pakete für Let’s Encrypt.
- Das Skript setzt ein vorkonfigurierten Webserver Nginx oder Apache voraus!
- Ggf. muss der Webserver vorher gestoppt werden (Siehe Schritt 5)
- Der Standardpfad für den Webordner ist im Skript “/usr/share/nginx/$1/”.
- $1 ist der Übergabeparameter domain.de (Siehe Skript ausführen).
Schritt 3: Let’s Encrypt Einstellung für Nginx Webserver
Im Nginx Virtual Host muss noch eine Einstellung für die jeweilige Domain vorgenommen werden. Standardmäßig verweigert Nginx das Ausführen von Dateien und Verzeichnisse welche mit “Punkt” beginnen!
location ~ /.well-known/acme-challenge/(.*) {
default_type text/plain;
}
Schritt 4: Let’s Encrypt Skript ausführen
./letsgetencrypt domain.de
“domain.de” durch den gewünschten Domainnamen ersetzen!
Schritt 5: Let’s Encrypt Skript Option wählen
Der Server muss auf Port 80 oder 443 erreichbar sein! Die “manuel” Option kann man z.B. auch Zuhause auf einer Linux Kiste ausführen.
Auswahl 1: “standalone”
- Nginx oder Apache müssen gestoppt werden da diese Option ein Programm auf Port 80 oder 443 ausführt, und es dadurch zu Konflikten kommt.
- Einfachste Option, führt ein eigenständiges Programm aus und erstellt die Zertifikate.
“standalone” Nachteile:
- Die Domain muss auf die IP des Servers zeigen wo auch diese Option ausgeführt wird.
- Alle Programme die auf Port 80 o. 443 lauschen müssen gestoppt werden. I.d.R. Apache oder Nginx.
Auswahl 2: “webroot”
- Nginx oder Apache müssen nicht gestoppt werden!
- Skript erstellt den erforderlichen Ordner “.well-known/acme-challenge” im Webordner.
- Das Erstellen des Authentifierungscodes macht Let’s Encrypt hier automatisch.
“webroot” Nachteile:
- Die Domain muss auf die IP des Servers zeigen wo auch diese Option ausgeführt wird.
Auswahl 3: “manual”
- Nginx oder Apache müssen nicht gestoppt werden!
- Die Domain muss nicht auf die IP des Servers zeigen wo auch diese Option ausgeführt wird.
- Ordner “.well-known/acme-challenge” muss im Webordner auf dem jeweiligen Server erstellt werden wo die Domain liegt.
- In den Webordner wechseln und
mkdir -p .well-known/acme-challenge
ausführen. - Anschließend kopiert man den kompletten (printf “%s”…>…) von Let’s Encrypt erstellten Code und führt den Befehl im Webordner aus. Nicht “Strg C” drücken, sondern Text markieren, Konsole wechseln und mit rechter Maustaste einfügen.
- Abschließend nur noch “Enter” drücken.
Ort wo die Zertifikate liegen
Alle erstellten Zertifikate, egal welche Option, werden unter /etc/letsencrypt/live/ abgelegt.
Schritt 6: Let’s Encrypt Zertifikate in den Webserver einbinden
cert.pem
Ist das Server Zertifikat oder auch Public Key.
- Nginx: Siehe Abschnitt “fullchain.pem”
- Apache:
SSLCertificateFile /pfad/zum/ssl/cert/cert.pem
- Apache: Ab Version 2.4.8 siehe Abschnitt “fullchain.pem”
privkey.pem
Ist der Private Key und muss geheimgehalten werden!
- Nginx:
ssl_certificate_key /pfad/zum/ssl/cert/privkey.pem
- Apache:
SSLCertificateKeyFile /pfad/zum/ssl/cert/privkey.pem
chain.pem
Ist der Public Key von Let’s Encrypt.
- Nginx: Entfällt
- Apache:
SSLCertificateChainFile /pfad/zum/ssl/cert/chain.pem
- Apache: Entfällt ab Version 2.4.8
fullchain.pem
Ist das Server Zertifikat und der Public Key von Let’s Encyrpt zusammen.
- Nginx:
ssl_certificate /pfad/zum/ssl/cert/fullchain.pem
- Apache:
SSLCertificateFile /pfad/zum/ssl/cert/fullchain.pem
Auf die nähere Konfiguration eines Webservers wird hier nicht eingegangen. Das würde sonst den Rahmen des Artikels sprengen.