Erik K.: ssl-Zertifikate für Domains mit getssl und letsencrypt

Beitrag lesen

Hallo Tom,

ich setze getssl aufgrund seiner Einfachheit und fast nicht vorhandenen Abhängigkeiten sehr gerne ein und das auf mehreren Linux-Servern.

Ja, für neue Subdomains musst du ein neues Zertifikat beantragen bzw. die Konfig (siehe unten) ändern und das Zertifikat neu beantragen.

Du kannst mehrere (Sub-)Domains in ein Zertifikat eintragen, aber diese Liste ist öffentlich einsehbar und jede Domain wird bei einer Aktualisierung (spätestens alle 3 Monate) neu geprüft. Wenn sich also häufiger mal was ändert, erstelle für jede Domain besser ein eigenes Zertifikat.

Wildcard geht übrigens nicht, auch keine IP-Zertifikate.

Ich nehme mal an, dass du Apache einsetzt und bisher noch keine ssl-vhosts hast. Dann wäre der Weg für die allererste Domain wie folgt:

Hast du schon das SSL-Modul vom Apache aktiviert? Wenn nicht:

a2enmod ssl

Zuerst musst du entscheiden, wo getssl die Challenge mit den LE-Servern aushandeln soll.

Da gibt es grundsätzlich 2 Möglichkeiten:

  1. du gibts getssl hier ein Verzeichnis für alle Domains (Schreib- & Leserechte Webserver nicht vergessen) und trägst das hier ein.

  2. du legst für jede Webseite ein eigenes Verzeichnis an (Schreib- & Leserechte Webserver nicht vergessen) und musst das bei jeden Zertifikat individuell hier aufgrund des DODUMENT_ROOT hinterlegen.

Meine best-practise Empfehlung: Nr. 1 (weil: einmal einstellen und es läuft dann für jede Domain ohne Anpassung)

Wenn Du Nr. 1 haben möchtest, brauchst du noch diese Konfigerweiterung beim Apachen: Solltest du noch Apache 2.2. haben, musst du die "allow from all" Anweisungen noch eintragen und "Require all granted" löschen.

Alias /.well-known /var/www/html/letsencrypt/.well-known
<Directory /var/www/html/letsencrypt/.well-known>
  Require all granted
  AllowOverride None
  Options -Indexes
</Directory>

Jetzt das Verzeichnis anlegen - die Verzeichnisrechte musst du selber anpassen:

mkdir -p /var/www/html/letsencrypt/.well-known/acme-challenge
chown -R www-data.www-data /var/www/html/letsencrypt/

... und Webserver neu starten.

Ok, nach dieser Grundsatz-Entscheidung gehts los:

Du kopierst den vhost für die erste Domain und änderst folgende Zeilen:

von: <VirtualHost *:80>

zu: <VirtualHost *:443>

Schau dir an, was in ServerName und ServerAlias steht - das brauchst du gleich noch. Notiere dir es vielleicht am besten in einer einfachen Textdatei (notepad, kwrite, oder so).

Danach folgen diese Zeilen - in ##DOMAIN## setzt du ein, was im ServerName steht (auch weiter unten):

  SSLEngine on
  SSLCertificateFile /etc/apache2/certs/##DOMAIN##.crt
  SSLCertificateKeyFile /etc/apache2/certs/##DOMAIN##.key
  SSLCertificateChainFile /etc/apache2/certs/##DOMAIN##.inter

Ok, Datei speichern & schließen. Wenn du eine extra-Datei dafür angefangen hast, aktiviere diese neue Site:

a2ensite neuer-dateiname

Lade dir jetzt getssl runter:

curl --silent https://raw.githubusercontent.com/srvrco/getssl/master/getssl > /usr/local/sbin/getssl ; chmod 700 /usr/local/sbin/getssl

... und bereite das Zertifikat vor:

getssl -c ##DOMAIN##

Du bekommst eine Ausgabe, in der die neu angelegten Konfig-Dateien genannt werden.

Öffne /root/.getssl/getssl.cfg

Zeile 5 ein # an den Anfang setzen.

Zeile 7 sollte so aussehen:

CA="https://acme-v01.api.letsencrypt.org"

Zeile 12ff sollten so aussehen:

ACCOUNT_EMAIL="##email-adresse-fuer-benachrichtigung-eingeben##"
ACCOUNT_KEY_LENGTH=4096
ACCOUNT_KEY="/root/.getssl/account.key"

Zeile 19:

RELOAD_CMD="/usr/sbin/apache2ctl -t && /etc/init.d/apache2 restart"

In Zeile 22 steht eine Zahl. Wenn ein Zertifikat nur noch diese Anzahl an Tagen gültig ist, soll es erneuert werden. Da LE-Zertifikate nur 3 Monate gültig sind, sollte die Zahl hier nicht zu groß sein. Aber auch nicht zu klein (wegen Urlaub, Feiertagen, etc).

RENEW_ALLOW="5"

Datei speichern & Schließen.

Öffne Datei /root/.getssl/##DOMAIN##/getssl.cfg

In Zeile 14 trägst du alles ein, was in ServerAlias steht, z.B.: Wichtig: Hier nur öffentlich existierende (Sub-)Domains.

SANS="subdomain.expample.org"

In Zeile 28 trägst du ein, wo getssl die Challenge mit den LE-Servern aushandeln soll.

ACL=('/var/www/html/letsencrypt/.well-known/acme-challenge')

Zeile 36ff:

DOMAIN_CERT_LOCATION=/etc/apache2/certs/##DOMAIN##.crt
DOMAIN_KEY_LOCATION=/etc/apache2/certs/##DOMAIN##.key
CA_CERT_LOCATION=/etc/apache2/certs/##DOMAIN##.inter

Datei speichern & schließen.

Fast fertig. Jetzt das Zertifikat bei LE beantragen:

getssl ##DOMAIN##

Wenn es Fehler beim Abruf gab, musst du prüfen, ob die Schreibrechte des ACL-Verzeichnisses stimmen.

Die Datei wird angegeben. Wenn du sie selber nicht aufrufen kannst (nur im Fehlerfall, getssl löscht sie eigenständig, wenn alles ok war), stimmen die Schreibrechte des ACL-Verzeichnisses wahrscheinlich nicht.

Ansonsten melde dich hier mal mit der ganzen Fehlermeldung.

Wenn alles geklappt hat, startet dein Webserver neu und du kannst die Domain per https erreichen.

Wenn https für diese Domain klappt, kannst du darüber nachdenken, per PermanentRewrite oder einer rewrite-Rule alles von http nach https umzuleiten, z.B.:

      RewriteEngine on
      RewriteCond %{SERVER_PORT} !^443
      RewriteRule ^(.*)$         https://##DOMAIN##/$1 [L,R=301]

Jetzt noch den Cronjob einrichten (siehe offizielle Anleitung), damit die Verlängerung der Zertifikate auch klappt.