Einrichten der ACME-ID
Die Validierung erfolgt mit External Account Binding
(EAB).
Dafür muss man sich zuerst im IT-Portal mit seiner
persönlichen digitalen ID anmelden (https://xsso.uni-muenster.de/IT-Portal/)
und dort unter „Digitale ID (Zertifikat)“ | „Neue
ACME-ID“ eine ACME-ID für die in die zukünftigen
Zertifikate aufzunehmende vollqualifizierten Domainnamen (FQDNs)
einrichten. (Die Liste der FQDNs einer ACME-ID kann später im
IT-Portal geändert werden.)
Dabei enthält man Schlüsseldaten in Form einer EAB-Key-ID
und eines EAB-HMAC-Key, die für die Registrierung des Servers
benötigt werden.
Installation der Software
Das EPEL-Repository enthält die CertBot-Software, diese kann
installiert werden mit:
yum install certbot
Registrierung des CertBot
Um den Server beim ACME-Dienst zu registrieren muss einmalig
folgender Befehl eingegeben werden. Dieser enthält Key-ID und
HMAC-Key für das External Account Binding sowie die
E-Mail-Adresse, die bei Problemen informiert werden soll:
certbot register --server 'server-url' --eab-kid
'key-id' --eab-hmac-key 'hmac-key' --email
'e-mail-adresse' --agree-tos --no-eff-email
Dabei bedeuten:
key-id
= die vom IT-Portal ausgegebene
(kürzere) Key-ID
hmac-key
= der vom IT-Portal ausgegebene
(längere) HMAC-Key
e-mail-adresse
= die E-Mail-Adresse, an
die der CertBot seine Informationen sendet
Nach erfolgreicher Registrierung werden Key-ID und HMAC-Key vom
ACME-Server gelöscht und können nicht mehr verwendet
werden.
Wenn eine ACME-ID auf mehreren Servern eingesetzt werden soll, kann
aber das CertBot-Verzeichnis /etc/letsencrypt
auf die
weiteren Server kopiert werden.
Zertifikat erzeugen
Um dann tatsächlich ein Zertifikat per ACME zu beantragen,
abzuholen, zu installieren und gleich auch noch den zertifizierten
Service neu zu starten, dient folgender Befehl:
certbot certonly --standalone --agree-tos --server
'server-url' --domain fqdn1,fqdn2,... --cert-name
'certname' --email='e-mail-adresse' --deploy-hook
'systemctl restart servicename'
Dabei bedeuten:
fqdn1,fqdn2,...
= die vollqualifizierten
Rechnernamen (FQDNs), unter denen der Dienst auftritt; diese FQDNs
müssen im IT-Portal für die ACME-ID angegeben worden sein;
der zuerst angegebene FQDN wird auch in das Subject des Zertifikats
aufgenommen, die anderen nur in die Subject Alternative Names
certname
= der frei wählbare
Dateiname (ohne Pfad) des Zertifikats
e-mail-adresse
= die E-Mail-Adresse, an
die der CertBot seine Informationen sendet
servicename
= der Name, unter dem der
Dienst vom System-Daemon verwaltet wird
Dieser Befehl legt alle benötigten Dateien im Verzeichnisbaum
/etc/letsencrypt/archive/certname/
ab und sorgt
dafür, dass die folgenden symbolischen Links immer auf die gerade
aktuellen Dateien verweisen:
/etc/letsencrypt/live/certname/privkey.pem
/etc/letsencrypt/live/certname/cert.pem
/etc/letsencrypt/live/certname/chain.pem
/etc/letsencrypt/live/certname/fullchain.pem
Der Service sollte natürlich so konfiguriert sein, dass er
genau diese symbolischen Links zum Zugriff auf die Dateien verwendet
und dass er sich mit dem mit --deploy-hook
angegebenen
Befehl neu starten lässt.
Statt diese Pfade zu benutzen, könnte CertBot auch automatisch
in Services eingebaut werden (z. B. mit --apache
oder
--nginx
statt --standalone
), das erfordert
aber Plugins.
Zugriffsberechtigungen auf die Zertifikatdateien
CertBot legt die Zertifikatdateien, insbesondere den privaten
Schlüssel, mit Zugriffsrechten nur für den root-User ab
(0700). Damit Anwendungen, die nicht als root, sondern unter einer
anderen Kennung laufen, diese Zertifikate auch einlesen dürfen,
müssen die entsprechenden Leserechte gesetzt werden.
setfacl -R -m u:username:rX
/etc/letsencrypt/{live,archive}/certname
setfacl -m u:username:rX
/etc/letsencrypt/{live,archive}
setfacl -m d:u:username:rX
/etc/letsencrypt/{live,archive}/certname
Dabei bedeuten:
username
= die Nutzerkennung, unter der
der Server läuft
certname
= der frei wählbare
Dateiname (ohne Pfad) des Zertifikats
Sie sollten unbedingt prüfen, ob die Kennung die erzeugten
privaten Schlüssel tatsächlich lesen kann, beispielsweise
mit:
getfacl
/etc/letsencrypt/archive/certname/priv*
Notfalls muss die ACL-Maske in obigen Befehlen angepasst werden.
Sie sollten die Zugriffsrechte nicht mit chown
,
chgrp
oder chmod
bearbeiten, denn das wird
vom CertBot geändert oder moniert.
Eine ganz andere Herangehensweise wäre, oben im
certbot
-Kommando bei der Option --deploy-hook
ein Skript anzugeben, welches die Datei an eine andere Stelle kopiert,
die Zugriffsrechte dieser Kopien mit chmod
richtig setzt
und dann den Server neu startet. Dann muss der Server natürlich so
konfiguriert werden, dass er diese Kopien verwendet und nicht die
Originaldateien.
Automatische Zertifikaterneuerung aktivieren
Dazu ist nur der CertBot-Renew-Timer zu starten:
systemctl enable certbot-renew.timer
systemctl start certbot-renew.timer
Es werden dann automatisch alle erzeugten und hinterlegten
Zertifikate vor Ablauf erneuert.