Wie kann man HTTPS auf qbittorrent WebUI mit letsencrypt / certbot einrichten?

2059
Frank

Ich arbeite qbittorrent-noxauf einem Ubuntu-Server (16.04).

Ich verwende eine dynamische DNS-Adresse, um auf die WebUI zuzugreifen.

Auf der Seite github gibt es ein Tutorial zum Einrichten von HTTPS, jedoch nur mit selbst signierten Zertifikaten.

Ich habe es bereits certbotmit den Optionen --webrootund probiert --standalone, aber ohne Erfolg. Eines der Hauptprobleme ist, dass ich nicht herausfinden kann, von wo aus die Dateien für die Web-Benutzeroberfläche tatsächlich bereitgestellt werden. Ansonsten --webrootsollte es funktionieren.

Kann mir bitte jemand erklären, wie ich es schaffen kann?

2

1 Antwort auf die Frage

3
Matteo Pergolesi

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 80von Ihrem Router an das Serverhosting weiterleiten qbittorrent-noxund denselben Port in Ihrer Serverfirewall öffnen. Bei Verwendung ufwist 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.pemund cert.pemin Ihremqbittorrent-nox Web-Ui und Sie sind fertig.

PS. Am Ende können Sie den Python-Webserver beenden.

PPS. Wenn Sie keinen Port 80auf 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 hooksist 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.shwird 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.shwird 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.shwird 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 qbittorrentKonfiguration befindet sich im Home-Ordner des Benutzers, der sie ausführt. Bearbeiten Sie dieses Skript entsprechend Ihrer Konfiguration.

update_config.pyaktualisiert 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 sedoder 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-runOption 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 --quietOption hinzu: es ist besser für Cron-Jobs.

Danke, das scheint funktioniert zu haben. Eine letzte Frage: Funktioniert die automatische Erneuerung? Benötige ich den Python-Webserver an Port 80, damit er funktioniert? Frank vor 6 Jahren 0
Wahrscheinlich. Das Verifizierungssystem sollte dasselbe sein, aber ich habe die Erneuerung nicht versucht. Ich mache es, wenn ich Zeit habe, und ich werde dich wissen lassen. Matteo Pergolesi vor 6 Jahren 1
Ok, ich werde dann auf deine Ergebnisse warten. Inzwischen scheint alles gut zu laufen, also akzeptiere ich Ihre Antwort. Vielen Dank! Frank vor 6 Jahren 0
@Frank Ich habe meine Antwort mit Skripts und Informationen aktualisiert, um die automatische Erneuerung einzurichten. Die Skripte aktualisieren auch die Konfiguration von 'qbittorrent'. Ich hoffe es hilft :) Matteo Pergolesi vor 6 Jahren 1
Ok, haben Sie die automatische Erneuerung selbst getestet? Dieser ganze Beitrag wäre eine großartige Ergänzung zu qBittorrents Wiki auf Github, wenn Sie Zeit haben, die Betreuer zu kontaktieren. Gut gemacht! Frank vor 6 Jahren 0
@Frank Heute habe ich ein paar Fehler im Python-Skript behoben. Ich fügte hinzu, dass der Dienst angehalten / neu geladen wurde, wenn sich die Konfigurationsdatei ändert. Natürlich habe ich das alles getestet. Ich werde mich so schnell wie möglich mit den Betreuern in Verbindung setzen. Matteo Pergolesi vor 6 Jahren 0