letsencrypt mit webroot-plugin in apache integrieren

Der letsencrypt-Client bietet verschiedene Wege, um den Server zu authentifizieren. Einer von denen funktioniert über das webroot-plugin. Hierbei wird in einem festgelegten Verzeichnis des clientseitigen Servers zum Authentifizerungszeitpunkt ein Schlüssel abgelegt, der vom Letsencrypt-Server abgerufen wird. Somit kann letsencrypt den Server klar als den zu zertifizierenden Hostnamen identifizieren.

Für den Server namens myserver.mydomain.tdl liegt dieses Verzeichnis liegt unter: 

http://myserver.mydomain.tld/.well-known/acme-challenge

Man kann das Verzeichnis einfach im jeweiligen Webroot anlegen oder verknüpfen. Da aber /.well-known z.B. auch von owncloud explizit für Webdav benutzt wird, existieren möglicherweise schon rewrites in der Apache-Konfiguration. Diese können uns dazwischen kommen, sodass letsencrypt-Authentifizierung fehlschlägt.

Um mir die Administration möglichst zu vereinfachen, habe ich mich entschieden ein kleine Apache-Makro auf zusetzten, das einen Alias-Pfad für

/.well-known/acme-challenge

 verknüpft.

Apache-Makro schreiben (siehe auch Apache-Wiki zu mod_macro):

<Macro letsencrypt $certhostname>
    Alias /.well-known/acme-challenge /var/cache/letsencrypt/$certhostname/.well-known/acme-challenge
    <Directory "/var/cache/letsencrypt/$certhostname/.well-known/acme-challenge">
        AllowOverride All
        Options FollowSymlinks
        Satisfy Any
        Require all granted
    </Directory>
    #letsencrypt
    SSLCertificateFile    "/etc/letsencrypt/live/$certhostname/fullchain.pem"
    SSLCertificateKeyFile "/etc/letsencrypt/live/$certhostname/privkey.pem"
</Macro>

Apache-Module für Makros aktivieren in der Datei 

/etc/httpd/conf/httpd.conf
LoadModule macro_module modules/mod_macro.so

oberhalb der Vhosts

#Makros
Include conf/extra/httpd-macro-letsencrypt.conf

in jedem Virtualhost, der ein webroot für letsencrypt braucht, das Makro aufrufen (hier Beispiel für myserver.mydomain.tld):

<VirtualHost *:443>
ServerName myserver.mydomain.tld
ServerAlias www.myserver.mydomain.tld
...
Use letsencrypt myserver.mydomain.tld
...
</VirtualHost>

Verzeichnisse anlegen

sudo mkdir -pv /var/cache/letsencrypt/myserver.mydomain.tld/.well-known/acme-challenge
sudo chown -R http:http /var/cache/letsencrypt/myserver.mydomain.tld

Ich habe meine Zertifikate von der manuellen Aktualisierung auf webroot umgestellt. Daher hat Apache schon funktionierende Zertifikate vor dem Start von letsencrypt.

Apache neu starten (funktioniert nur bei schon vorhandenen Zertifikaten im Pfad für 

SSLCertificateFile

  und 

SSLCertificateKeyFile

 )

sudo systemctl restart httpd

Für die Änderung der Zertifikate wird die Option „break-my-certs“ erforderlich:

sudo letsencrypt certonly --break-my-certs --webroot -w /var/cache/letsencrypt/myserver.mydomain.tld/ -d myserver.mydomain.tld -d www.myserver.mydomain.tld --server https://acme-v01.api.letsencrypt.org/directory

Ist das erledigt, kann man die Zertifikate aller Virtualhosts mit dem Befehl

letsencrypt renew

  erneuern.

[user@myserver ~]$ sudo letsencrypt renew
Processing /etc/letsencrypt/renewal/myserver.mydomain.tld.conf
Processing /etc/letsencrypt/renewal/myserver1.mydomain.tld.conf
Processing /etc/letsencrypt/renewal/otherserver.mydomain2.tld.conf

The following certs are not due for renewal yet:
  /etc/letsencrypt/live/myserver.mydomain.tld/fullchain.pem (skipped)
  /etc/letsencrypt/live/myserver1.mydomain.tld/fullchain.pem (skipped)
  /etc/letsencrypt/live/otherserver.mydomain2.tld/fullchain.pem (skipped)
No renewals were attempted.

 

Letsencrypt yeah!

Kommentar verfassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.