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!