SSL-Zertifikate erstellen

Diese Tutorials behandeln kurz das Erstellen neuer SSL-Zertifikate für Ihr Panel und/oder Wings.

Certbot (Empfohlen)

Info: Diese Methode ist am meisten empfohlen und sollte in 98% der Setups funktionieren.

Wir beginnen mit der Installation von Certbot, einem einfachen Skript, das unsere Zertifikate automatisch erneuert und deren Erstellung viel einfacher macht. Der folgende Befehl ist für Ubuntu-Distributionen, aber Sie können immer Certbots offizielle Website für Installationsanweisungen prüfen.

sudo apt install -y python3-certbot-nginx
sudo apt install -y python3-certbot-apache
sudo apt install -y certbot

Zertifikat erstellen

Nach der Installation von Certbot müssen wir ein Zertifikat generieren. Es gibt mehrere Möglichkeiten, dies zu tun, aber am einfachsten ist es, das webserver-spezifische Certbot-Plugin zu verwenden, das Sie gerade installiert haben.

Info: Für reine Wings-Maschinen, die keinen Webserver benötigen, verwenden Sie die Standalone- oder DNS-Methode von Certbot, da Sie keinen Webserver dafür benötigen.

Im folgenden Befehl sollten Sie example.com durch die Domain ersetzen, für die Sie ein Zertifikat generieren möchten. Wenn Sie mehrere Domains haben, für die Sie Zertifikate möchten, fügen Sie einfach weitere -d anotherdomain.com Flags zum Befehl hinzu.

HTTP Challenge

HTTP Challenge erfordert, dass Sie Port 80 für die Challenge-Verifizierung freigeben.

certbot certonly --nginx -d example.com
certbot certonly --apache -d example.com
certbot certonly --standalone -d example.com

DNS Challenge

DNS Challenge erfordert, dass Sie einen neuen TXT DNS-Eintrag erstellen, um die Domain-Eigentümerschaft zu verifizieren, anstatt Port 80 freigeben zu müssen. Die Anweisungen werden angezeigt, wenn Sie den folgenden Certbot-Befehl ausführen.

certbot -d example.com --manual --preferred-challenges dns certonly

Automatische Erneuerung

Sie möchten wahrscheinlich auch die automatische Erneuerung von Zertifikaten konfigurieren, um unerwartete Zertifikatsabläufe zu verhindern. Sie können Crontab mit sudo crontab -e öffnen und die folgende Zeile am Ende hinzufügen für den Versuch der Erneuerung jeden Tag um 23 Uhr (11 PM).

Deploy Hook würde den Nginx-Service neu starten, um ein neues Zertifikat anzuwenden, wenn es erfolgreich erneuert wurde. Ändern Sie nginx im Restart-Befehl entsprechend Ihren Bedürfnissen, z.B. zu apache oder wings.

0 23 * * * certbot renew --quiet --deploy-hook "systemctl restart nginx"

Fehlerbehebung

Wenn Sie eine Unsichere Verbindung oder SSL/TLS-bezogene Fehler beim Zugriff auf Ihr Panel oder Wings erhalten, ist das Zertifikat wahrscheinlich abgelaufen. Dies kann einfach durch Erneuerung des SSL-Zertifikats behoben werden, obwohl der Befehl certbot renew möglicherweise nicht funktioniert, wenn Port 80 in Verwendung ist.

Die Lösung dafür ist die Verwendung der Nginx- oder Apache-Plugins mit --nginx und --apache. Alternativ können Sie Nginx stoppen, dann das Zertifikat erneuern und schließlich Nginx neu starten.

Nginx stoppen:

systemctl stop nginx

Zertifikat erneuern:

certbot renew

Sobald der Prozess abgeschlossen ist, können Sie Nginx neu starten:

systemctl start nginx

Sie müssen möglicherweise auch Wings neu starten, da nicht jeder Service in der Lage ist, ein aktualisiertes Zertifikat automatisch anzuwenden:

systemctl restart wings

Apache mit CloudFlare API (Erweitert)

Warnung: Dies ist für fortgeschrittene Benutzer, deren Serversysteme keinen Zugang zu Port 80 haben. Der folgende Befehl ist für Ubuntu-Distributionen und CloudFlare API.
curl https://get.acme.sh | sh

CloudFlare API-Schlüssel erhalten (Legacy)

Nach der Installation von acme.sh müssen wir einen CloudFlare API-Schlüssel abrufen. Wählen Sie auf der Cloudflare-Website Ihre Domain aus, kopieren Sie dann auf der rechten Seite Ihre "Zone ID" und "Account ID". Klicken Sie auf "Get your API token", klicken Sie auf "Create Token" > wählen Sie die Vorlage "Edit zone DNS" > wählen Sie den Bereich "Zone Resources".

Zertifikat erstellen

Da die Konfigurationsdatei auf Certbot basiert, müssen wir den Ordner manuell erstellen.

sudo mkdir -p /etc/letsencrypt/live/example.com

Nach der Installation von acme.sh und dem Erhalt des CloudFlare API-Schlüssels müssen wir dann ein Zertifikat generieren. Geben Sie zuerst die CloudFlare API-Anmeldedaten ein.

export CF_Token="Your_CloudFlare_API_Key"
export CF_Account_ID="Your_CloudFlare_Account_ID"
export CF_Zone_ID="Your_CloudFlare_Zone_ID"

Caddy mit CloudFlare API (Erweitert)

Warnung: Dies ist für fortgeschrittene Benutzer, die Cloudflare im Proxy-Modus betreiben oder keinen Zugang zu Port 80 haben.

Caddy mit Cloudflare DNS-Plugin installieren

Caddy kommt standardmäßig nicht mit dem Cloudflare DNS-Plugin, Sie müssen es selbst installieren.

Es gibt zwei Hauptmethoden:

  1. Verwendung von xcaddy - CLI-Tool zum Erstellen Ihres eigenen Caddy-Builds
  2. Herunterladen vorgefertigter Binärdateien von Caddys Download-Seite
  3. Verwendung von Ansible zum Herunterladen und Installieren von Caddy mit Plugins

CloudFlare API-Token erhalten

Nach der Installation von Caddy mit Cloudflare DNS-Plugin müssen wir ein Cloudflare API-Token abrufen. Stellen Sie sicher, dass ein DNS-Eintrag (A- oder CNAME-Eintrag) auf Ihren Zielknoten zeigt. Gehen Sie dann zu My Profile > API Tokens und klicken Sie bei API Tokens auf "Create Token".

Caddy neu konfigurieren, um Cloudflare DNS für Zertifikatserstellung zu verwenden

Erstellen Sie eine Umgebungsvariablen-Datei (wie .env), bedenken Sie, dass diese Datei Geheimnisse enthält und nicht öffentlich zugänglich sein sollte.

Wir empfehlen, dass Sie die Geheimnisdatei am folgenden Ort erstellen: /etc/caddy/.secrets.env.

CLOUDFLARE_API_TOKEN=<cloudflare api token>

Aus Sicherheitsgründen empfehlen wir, Berechtigungen auf 0600 zu setzen (nur Besitzer kann die Datei lesen oder schreiben).

# Besitz der `.secrets.env` Datei auf `caddy` Systembenutzer setzen
sudo chown caddy:caddy /etc/caddy/.secrets.env

# Lese-Schreibberechtigungen nur für Besitzer setzen - den `caddy` Systembenutzer
sudo chmod 0600 /etc/caddy/.secrets.env

Sie können einen tls Block zu Ihrem Caddyfile hinzufügen, unter dem <domain> Block Ihrer Panel-Konfiguration:

<domain> {
# ...

tls {
    dns cloudflare {env.CLOUDFLARE_API_TOKEN}
}
}