====== 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