Benutzer-Werkzeuge

Webseiten-Werkzeuge


lets_encrypt

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

  1. Installation des Scripts und der Umgebung
    cd /usr/local/src/
    git clone https://github.com/diafygi/acme-tiny.git
    
    mkdir /var/www/lets_encrypt
    cd /var/www
    chmod 750 lets_encrypt
    chown www-data. lets_encrypt
    cd lets_encrypt
    cp /usr/local/src/acme-tiny/acme_tiny.py .
    chmod 740 acme_tiny.py
  2. Account-Schlüssel anlegen
    openssl genrsa 2048 > account.key
    chmod 400 account.key
  3. Domainschlüssel anlegen
    openssl genrsa 2048 > <domain>.key
    chmod 640 <domain>.key
  4. CSR erstellen
    openssl req -new -sha256 -key <domain>.key -subj "/CN=<domain1>" -config <domain>-san.conf > <domain>.csr
    chmod 640 <domain>.csr

    SAN können über die Angabe einer Konfigurationsdatei mit Optionen eingestellt werden. Beachte, daß die Hauptdomain ebenfalls in die Liste der SAN eingeschlossen wird. -config san.conf

    domain-san.conf
    [req]
    distinguished_name = req_distinguished_name
    req_extensions = v3_req
     
    [req_distinguished_name]
    CN = www.piratenfraktion-sh.de
     
    [v3_req]
    subjectAltName = @alt_names
     
    [alt_names]
    DNS.1 = example.com
    DNS.2 = www.example.com
    DNS.3 = sub.www.example.com
  5. Prüfe, ob der CSR korrekten Inhalt hat
    openssl req -in <domian>.csr -noout -text
  6. Verzeichnis für Challenges erstellen und über den Webserver freigeben
    mkdir challenges
    chmod 750 challenges
    chown www-data. challenges
    • Lighttpd:
      /etc/lighttpd/lighttpd.conf
      alias.url += ( "/.well-known/acme-challenge/" => "/var/www/lets_encrypt/challenges/" )
    • 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;
      }
  7. Webserver neu laden
    • Apache: /etc/init.d/apache2 reload
  8. Zertifikat anfordern
    ./acme_tiny.py --account-key ./account.key --csr ./<domain>.csr --acme-dir /var/www/lets_encrypt/challenges/ > ./<domain>.crt
    chmod 640 signed.crt
  9. Intermediate Zertifikat holen
    wget -O - https://letsencrypt.org/certs/lets-encrypt-x3-cross-signed.pem > intermediate.pem
    cat intermediate.pem >> <domain>.crt
  10. Zertifikat ind Schlüssel an Zielposition ablegen
    cp -p <domain>.crt /etc/ssl/certs/
    cp -p <domain>.key /etc/ssl/private/
  11. Anschließend Zertifikat und Schlüssel im der entsprechenden Webserverkonfiguration einbauen

Ü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

  1. Erneuertes Zertifikat anfordern
    ./acme_tiny.py --account-key ./account.key --csr ./<domain>.csr --acme-dir /var/www/lets_encrypt/challenges/ > ./<domain>.crt
    chmod 640 <domain>.crt
  2. 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
  3. Zertifikat ind Schlüssel an Zielposition ablegen
    cp <domain>.crt /etc/ssl/certs/
  4. Neuladen der Serverkonfiguration
    /etc/init.d/apache2 reload
    bzw.
    /etc/init.d/nginx reload
lets_encrypt.txt · Zuletzt geändert: 26.05.2018 10:27 von thooge