
Ich möchte fragen, ob es möglich ist, Certbot für ein halbautomatisches Setup zu verwenden, bei dem die zugrunde liegende Infrastruktur gesteuert wird durchMichund nicht von Certbot.
Ich verstehe, dass Certbot mit Let’s Encrypt kommunizieren wird, um eine Herausforderung auszugeben, die im Grunde ein Token ist, das Certbot unter meiner IP-Adresse oder meinem DNS finden muss.
Ich habe die volle Kontrolle über den Apache-Server, aber es handelt sich um ein sehr angepasstes Multihosting-Setup (SNI erforderlich!) und ich möchte nicht, dass Certbot meine Apache-Konfiguration durcheinanderbringt oder als Root ausgeführt wird. Wir werden später auf sudoers zurückkommen.
Ich habe bereits den Hosting-Bereich für eingerichtet mta-sts.example.org
, da ich implementiereStrikte Transportsicherheit des Mail Transfer Agents
Ich habe Apache mit einem Makro mitgeteilt, dass dies /home/djechelon/srv/www/domains/mta-sts.example.org
mein Arbeitsbereich ist
- htdocs: über HTTP bereitgestellter Inhalt
- htdocs-secure: Inhalt über HTTPS bereitgestellt
- Protokolle: Apache VHost-Protokolle
- ssl: hier
mta-sts.example.org.{key,crt,ca_bundle?}
existieren
Ich möchte Certbot anweisen, Folgendes für mich zu tun
- Holen Sie sich die Herausforderung von LE
- Schreiben Sie die Herausforderung in die entsprechende Datei unter
/home/djechelon/..../htdocs
, und Apache ist bereit, sie zu bedienen - Bitten Sie LE, die Herausforderung zu validieren, da ApacheIstbereit, sich der Herausforderung zu stellen
- Zertifikat schreiben an
/home/djechelon/..../ssl/
. Wenn LE kein ca_bundle bereitstellt, kein Problem, bei mir ist es optional - Problem beim Neuladen von Apache (wahrscheinlich wird es bald eine Sudoers-Einstellung geben)
Mir war klar, dass ich in diesem Fall das Plug-In verwenden musste webroot
, aber ich hatte Schwierigkeiten, eine Befehlszeilenhilfe für alle Optionen zu finden, auch für die Frage, wo die Dateien und Zertifikate gespeichert werden sollten.
In der Dokumentation wird davon ausgegangen, dass es sich um einen interaktiven Prozess handelt. Daher müsste ich die Challenge-Datei manuell kopieren und Certbot bitten, sich zur Domänenvalidierung an LE zu wenden.
Ich bin der Meinung, dass es eine einfache Möglichkeit geben sollte, das oben genannte einfache Skript auszuführen. Dabei wird vorausgesetzt, dass die gesamte IT-Infrastruktur vorhanden ist (z. B. Sie möchten wirklich Ihre eigene Serversoftware ausführen) und gut konfiguriert ist.
Irgendeine Hilfe?
[Bearbeiten] Ich habe es vorerst geschafft, dies interaktiv aufzurufen
certbot certonly --webroot -d mta-sts.example.org --preferred-challenges http --work-dir /home/djechelon/etc/letsencrypt --logs-dir /home/djechelon/letsencrypt-logs --config-dir /home/djechelon/etc/letsencrypt
Dabei wurde ich nach dem Webroot-Verzeichnis und der E-Mail-Adresse gefragt (etwas, das ich gerne als Parameter für zukünftige Erneuerungen übergeben hätte). Die Frage könnte nun lauten: „Wie kann ich dies in Zukunft nicht interaktiv mit Cron erneut ausführen?“
Antwort1
Ich würde die Zertifikate nicht im Home-Verzeichnis des Benutzers speichern ( /home/djechelon/..../ssl/
), weilWenn der Benutzer die Zertifikatsdateien entfernt, kann Apache nicht gestartet werden. Ich stimme Ihrer Argumentation zu, dass es besser ist, wenn Certbot die Konfiguration des Webservers nicht durcheinanderbringt, aber derzeit scheint es, dass Sie tatsächlich dasselbe Problem verursachen, das Sie vermeiden möchten, und deshalb versuche ich, Sie zu warnen.
Es gibt keinen Grund, das Home-Verzeichnis für HTTP-01-Herausforderungen oder Protokolldateien zu verwenden. Außerdem ist es möglich, mit Apache eine statische Konfiguration zu verwenden, indem Sie Certbot im certonly
Modus verwenden, wie Sie es bereits tun.
Meine Lösung für automatische Verlängerungen besteht darin, für alle HTTP-01-Herausforderungen dasselbe Arbeitsverzeichnis zu verwenden (von /etc/letsencrypt/renewal/example.com.conf
):
# renew_before_expiry = 30 days
version = 0.31.0
archive_dir = /etc/letsencrypt/archive/example.com
cert = /etc/letsencrypt/live/example.com/cert.pem
privkey = /etc/letsencrypt/live/example.com/privkey.pem
chain = /etc/letsencrypt/live/example.com/chain.pem
fullchain = /etc/letsencrypt/live/example.com/fullchain.pem
# Options used in the renewal process
[renewalparams]
authenticator = webroot
server = https://acme-v02.api.letsencrypt.org/directory
account = 0123456789abcdef0123456789abcdef
rsa_key_size = 4096
[[webroot_map]]
example.com = /var/www/letsencrypt
www.example.com = /var/www/letsencrypt
Auf diese Weise ist es möglich, eine globale Variable hinzuzufügen Alias
, die alle Herausforderungen bewältigt. Es ist jedoch auch möglich, sie nur auf den virtuellen Hosts zu platzieren, wo sie benötigt wird:
<IfModule alias_module>
Alias /.well-known/acme-challenge/ /var/www/letsencrypt/.well-known/acme-challenge/
</IfModule>
Antwort2
Wahrscheinlich muss der interaktive Modus nur einmal ausgeführt werden. Certbot merkt sich, wo Zertifikate gespeichert sind, und dies ist immer im Arbeitsverzeichnis.
Nicht so schlimm. Meine Lösung war, /home/djechelon/srv/..../ssl/*
durch Symlinks zu ersetzen
Zusamenfassend:
- Richten Sie das virtuelle Hosting wie gewohnt ein
- Verwenden Sie den Befehl, um ein neues Zertifikat für die neue Website zu erhalten
- Apache neu laden (das brauche ich zum Einrichten des virtuellen Hosts)
- Bei Erneuerung nur
certbot renew
mit dem richtigen Arbeitsverzeichnis verwenden, um als Nicht-Root zu laufen
Ausgabebefehl
certbot certonly --webroot -d mta-sts.example.org --preferred-challenges http --work-dir [non-root-workdir --logs-dir [non-root-workdir] --config-dir [non-root-workdir]
Erneuerungsbefehl (kann cron
ggf. -ned sein)
certbot renew --work-dir [non-root-workdir --logs-dir [non-root-workdir] --config-dir [non-root-workdir]
Bei der Erneuerung sollte man natürlich mindestens einen Apache-Neustart einplanen