lets_encrypt
Inhaltsverzeichnis
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/<domain>.key chmod 640 /etc/ssl/private/<domain>.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.
- domain-san.conf
[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/<domain>.key \ -subj "/CN=<domain1>" -config <domain>-san.conf > <domain>.csr chmod 640 <domain>.csr
- Prüfe, ob der CSR korrekten Inhalt hat
openssl req -in <domian>.csr -noout -text
- Verzeichnis für Challenges erstellen und über den Webserver freigeben
mkdir challenges chmod 750 challenges chgrp www-data challenges
- Lighttpd:
- /etc/lighttpd/lighttpd.conf
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:
- /etc/apache2/sites-available/000-default.conf
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:
- /etc/nginx/default
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 <domain>.csr --acme-dir /var/www/lets_encrypt/challenges/ > <domain>.crt chmod 640 <domain>.crt
- Zertifikat an Zielposition ablegen
cp -p <domain>.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 <certificate>.crt -text -noout
Erneuerung
- Erneuertes Zertifikat anfordern
cd /var/www/lets_encrypt acme-tiny --account-key account.key --csr <domain>.csr --acme-dir /var/www/lets_encrypt/challenges/ > <domain>.crt chmod 640 <domain>.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 >> <domain>.crt
- Zertifikat ind Schlüssel an Zielposition ablegen
cp -p <domain>.crt /etc/ssl/certs/
- Neuladen der Serverkonfiguration
/etc/init.d/apache2 reload bzw. /etc/init.d/nginx reload
lets_encrypt.txt · Zuletzt geändert: 20.11.2023 16:13 von thooge