====== Let's Encrypt ======
Wir verwenden ACME-Tiny. Das ist nur genau ein Python-Script was man
benutzen muß. Das kann dann ganz leicht in eine eigene, überschaubare
Umgebung eingebaut werden.
===== Erstinstallation =====
- Installation des Scripts und der Umgebung
apt-get install acme-tiny
mkdir /var/www/lets_encrypt
cd /var/www
chmod 750 lets_encrypt
chgrp www-data lets_encrypt
- Account-Schlüssel anlegen
cd /var/www/lets_encrypt
openssl genrsa 2048 > account.key
chmod 400 account.key
- Domainschlüssel anlegen
openssl genrsa 2048 > /etc/ssl/private/.key
chmod 640 /etc/ssl/private/.key
- SAN-Konfiguration erstellen, SAN können über die Angabe einer Konfigurationsdatei mit Optionen eingestellt werden. Beachte, daß die Hauptdomain ebenfalls in die Liste der SAN eingeschlossen wird.
[req]
distinguished_name = req_distinguished_name
req_extensions = v3_req
[req_distinguished_name]
CN = www.example.com
[v3_req]
subjectAltName = @alt_names
[alt_names]
DNS.1 = example.com
DNS.2 = www.example.com
DNS.3 = sub.www.example.com
- CSR erstellen
openssl req -new -sha256 -key /etc/ssl/private/.key \
-subj "/CN=" -config -san.conf > .csr
chmod 640 .csr
- Prüfe, ob der CSR korrekten Inhalt hat
openssl req -in .csr -noout -text
- Verzeichnis für Challenges erstellen und über den Webserver freigeben
mkdir challenges
chmod 750 challenges
chgrp www-data challenges
* Lighttpd:
alias.url += ( "/.well-known/acme-challenge/" => "/var/www/lets_encrypt/challenges/" )
$HTTP["scheme"] == "http" {
url.redirect = (
"^/\.well-known/acme-challenge/.*" => "",
"^/(.*)" => "https://www.example.com/$1"
)
}
* Apache:
Alias "/.well-known/acme-challenge" "/var/www/lets_encrypt/challenges"
[...]
SSLCertificateFile /var/www/lets_encrypt/signed.crt
SSLCertificateKeyFile /var/www/lets_encrypt/domain.key
Falls SSL erzwungen werden soll, so kann dieses wie folgt eingestellt werden
RedirectMatch Permanent ^(?!/\.well-known/).* https://www.example.com
* Nginx:
location ^~ /.well-known/acme-challenge/ {
default_type "text/plain";
alias /var/www/lets_encrypt/challenges/;
}
location = /.well-known/acme-challenge/ {
return 404;
}
- Zertifikat anfordern
acme-tiny --account-key account.key --csr .csr --acme-dir /var/www/lets_encrypt/challenges/ > .crt
chmod 640 .crt
- Zertifikat an Zielposition ablegen
cp -p .crt /etc/ssl/certs/
- Anschließend Zertifikat und Schlüssel im der entsprechenden Webserverkonfiguration einbauen
- Webserver neu laden
* Apache: ''/etc/init.d/apache2 reload''
* Nginx: ''/etc/init.d/nginx reload''
===== Überprüfung =====
In regelmäßigen Abständen wird überprüft, ob das Zertifikat
erneuert werden muß. Dieses kann durch einen täglichen oder
wöchentlichen Cronjob erledigt werden.
Mauell den Inhalt eines zertifikats anzeigen
openssl x509 -in .crt -text -noout
===== Erneuerung =====
- Erneuertes Zertifikat anfordern
cd /var/www/lets_encrypt
acme-tiny --account-key account.key --csr .csr --acme-dir /var/www/lets_encrypt/challenges/ > .crt
chmod 640 .crt
- ggf. Intermediate Zertifikat holen und anfügen
wget -O - https://letsencrypt.org/certs/lets-encrypt-x3-cross-signed.pem > intermediate.pem
cat intermediate.pem >> .crt
- Zertifikat ind Schlüssel an Zielposition ablegen
cp -p .crt /etc/ssl/certs/
- Neuladen der Serverkonfiguration
/etc/init.d/apache2 reload
bzw.
/etc/init.d/nginx reload