Ich habe es auf Archlinux geschafft, aber ich denke, es würde auf Ubuntu genauso sein.
Zertifikatsanfrage
Führe certbot so aus:
sudo certbot certonly --manual -d yourhostname.org
Folge den Anweisungen. An einem bestimmten Punkt werden Sie von certbot aufgefordert, einen Webserver auszuführen, um zu überprüfen, ob Sie den Hostnamen besitzen. Es enthält auch einige Befehle, um einen einfachen Webserver mit Python auszuführen. Führen Sie diese Befehle als root in einer neuen Shell auf Ihrem Server aus.
Stellen Sie sicher, dass Sie einen Port 80
von Ihrem Router an das Serverhosting weiterleiten qbittorrent-nox
und denselben Port in Ihrer Serverfirewall öffnen. Bei Verwendung ufw
ist dies der gewünschte Befehl:
sudo ufw allow WWW
WWW
ist eine einfache Konfiguration, um Verbindungen an Port 80 zuzulassen.
Wenn der Überprüfungsvorgang abgeschlossen ist, finden Sie Schlüssel- und Zertifikatdateien in /etc/letsencrypt/live/yourhostname.org
. Kopieren / Einfügen privkey.pem
und cert.pem
in Ihremqbittorrent-nox
Web-Ui und Sie sind fertig.
PS. Am Ende können Sie den Python-Webserver beenden.
PPS. Wenn Sie keinen Port 80
auf Ihrem Server verwenden, können Sie ihn auch von entfernenufw ALLOW
Regeln und von der Portweiterleitung Ihres Routers .
Automatische Verlängerung des Zertifikats
Grundsätzlich müssen Sie die im vorherigen Abschnitt beschriebenen Schritte automatisieren.
Der auszuführende Befehl lautet wie folgt:
certbot renew --manual-auth-hook /etc/letsencrypt/scripts/auth-hook.sh \ --manual-cleanup-hook /etc/letsencrypt/scripts/cleanup-hook.sh \ --post-hook /etc/letsencrypt/scripts/post-hook.sh
Das hooks
ist im Wesentlichen durch certbot ausgeführt Skripten. certbot exportiert einige Umgebungsvariablen in die Skripts. Bitte beachten Sie die certbot-DokumenteWeitere Informationen finden .
Skripte werden eingelegt /etc/letsencrypt/scripts
. Erstellen Sie diesen Ordner und legen Sie Ihre Skripts dort ab oder verwenden Sie einen anderen Ordner Ihrer Wahl.
Erklärungen und Code für Skripts:
auth-hook.sh
wird vor dem Überprüfungsvorgang ausgeführt. Es richtet einen einfachen Webserver ein, um CERTBOT_TOKEN verfügbar zu machen.
#!/bin/zsh ufw allow WWW mkdir -p /tmp/certbot/public_html/.well-known/acme-challenge cd /tmp/certbot/public_html printf "%s" $CERTBOT_VALIDATION > .well-known/acme-challenge/$CERTBOT_TOKEN $(command -v python2 || command -v python2.7 || command -v python2.6) -c "import BaseHTTPServer, SimpleHTTPServer; s = BaseHTTPServer.HTTPServer(('', 80), SimpleHTTPServer.SimpleHTTPRequestHandler); s.serve_forever()" &> /dev/null &
cleanup-hook.sh
wird nach dem Überprüfungsverfahren ausgeführt, unabhängig davon, ob das Zertifikat erneuert wurde oder nicht. Wir verwenden es, um den Webserver aufzuräumen.
#!/bin/zsh kill $(ps aux | grep SimpleHTTPServer | awk 'NR==1') rm -rf /tmp/certbot/public_html/.well-known/acme-challenge ufw delete allow WWW
post-hook.sh
wird ausgeführt, wenn das Zertifikat tatsächlich erneuert wird. Wir verwenden es zum Update /home/user/.config/qBittorrent/qBittorrent.conf
.
#!/bin/zsh systemctl stop qbittorrent.service && /etc/letsencrypt/scripts/update_config.py \ --hostname $CERTBOT_DOMAIN \ --configfile /home/user/.config/qBittorrent/qBittorrent.conf && systemctl start qbittorrent.service &&
Bitte beachten Sie : Die qbittorrent
Konfiguration befindet sich im Home-Ordner des Benutzers, der sie ausführt. Bearbeiten Sie dieses Skript entsprechend Ihrer Konfiguration.
update_config.py
aktualisiert das qBittorrent.conf
. Ich habe Python verwendet, weil das ConfigParser-Modul sehr praktisch zum Bearbeiten von INI-Dateien ( key=value
) war. Jemand, der klüger als ich ist, kann wahrscheinlich mit sed
oder dasselbe erreichen awk
.
#!/usr/bin/python3 import argparse import configparser Config = configparser.ConfigParser() Config.optionxform = str parser = argparse.ArgumentParser(description='Updates qbittorrent config.') parser.add_argument('--hostname', required=True) parser.add_argument('--configfile', required=True) args = parser.parse_args() with open('/etc/letsencrypt/live/' + args.hostname + '/cert.pem', 'r') as f: cert = f.read() with open('/etc/letsencrypt/live/' + args.hostname + '/privkey.pem', 'r') as f: key = f.read() cert = cert.replace('\n', '\\n')[:-2] cert = "\"@ByteArray(" + cert + ")\"" key = key.replace('\n', '\\n')[:-2] key = "@ByteArray(" + key + ")" Config.read(args.configfile) Config["Preferences"]["WebUI\HTTPS\Certificate"] = cert Config["Preferences"]["WebUI\HTTPS\Key"] = key with open(args.configfile, 'w') as f: Config.write(f, space_around_delimiters=False)
Probelauf
Bearbeiten Sie diese Skripts nach Ihren Bedürfnissen. Versuchen Sie nun, den vorherigen Befehl mit der --dry-run
Option auszuführen . Dadurch wird das Erneuerungsverfahren auch dann ausgeführt, wenn das Zertifikat nicht abgelaufen ist.
certbot renew --manual-auth-hook /etc/letsencrypt/scripts/auth-hook.sh --manual-cleanup-hook /etc/letsencrypt/scripts/cleanup-hook.sh --post-hook /etc/letsencrypt/scripts/post-hook.sh --dry-run
Cron-Job
Wenn alles in Ordnung ist, können Sie einen Cron-Job einrichten.
# EDITOR=vim crontab -e 00 04,16 * * * sleep $((RANDOM % 60)); certbot renew --quiet --manual-auth-hook /etc/letsencrypt/scripts/auth-hook.sh --manual-cleanup-hook /etc/letsencrypt/scripts/cleanup-hook.sh --post-hook /etc/letsencrypt/scripts/post-hook.sh
Der Job wird jeden Tag um 04:00 und 16:00 Uhr ausgeführt. Der zufällige Schlaf wählt eine zufällige Minute innerhalb der ausgewählten Stunden (wie von certbot-Dokumenten vorgeschlagen ).
Wir fügen --quiet
Option hinzu: es ist besser für Cron-Jobs.