skip to Main Content

Ich hatte große Probleme Lets Encrypt unter Cloudflare zu installieren. Oft kam es zu remote error: tls: handshake failure Fehlern oder zu could not bind port 80 already in use errors.

Wie ich SSL Zertifikate hinter Cloudflare doch zum Laufen gebracht habe, zeige ich euch jetzt:

Alte Certbot Scripts entfernen

Zu aller erst sollen wir alle alten Certbot Sachen von unserem Server entfernen. Dazu wie folgt vorgehen:

apt-get update
apt-get upgrade
apt-get remove certbot*
apt-get autoremove

Certbot installieren

Unter Debian 9 müssen wir jetzt den Certbot wieder installieren. Dazu zu erst in die /etc/apt/sources.list gehen und die folgenden beiden leinen auskommentieren:

nano /etc/apt/sources.list

deb http://deb.debian.org/debian stretch-backports main contrib non-free
deb-src http://deb.debian.org/debian stretch-backports main contrib non-free

Danach apt update und certbot installieren

apt-get update
apt-get upgrade
apt-get install python-certbot-nginx -t stretch-backports

Nginx für acme challenge konfigurieren

Damit lets encrypt die acme challenge hinbekommt, muss eurer nginx server die Dateien in euren webverzeichnis /.well-known/acme-challenge/ auch ausgeben. Deshalb müssen wir entweder in einer global configuration file oder in den einzelnen site configs folgende Zeilen hinzufügen:

location ^~ /.well-known/acme-challenge/ {
    allow all;
    default_type "text/plain";
}

location ~ /\. {
    deny all;
    access_log off;
    log_not_found off;
}

Der erste block erlaubt Zugriffe für die acme challenge und der zweite verhindert alle zugriffe auf hidden files wie z.B. .htaccess oder .ds_store.

Zertifikate Installieren

Jetzt können wir endlich unsere Zertifikate installieren. Dazu benutzen wir webroot da, sonst der oben genannte TLS handshake error von Cloudflare kommt:

certbot certonly --webroot

# Domain eingegben
welaunch.io

# path setzen
/var/www/welaunch.io/www/

Jetzt solltet ihr erfolgreich ein Zertifikat ergattern können:

certbot certonly --webroot
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator webroot, Installer None
Please enter in your domain name(s) (comma and/or space separated)  (Enter 'c'
to cancel): welaunch.io,welaunch.io
Obtaining a new certificate
Performing the following challenges:
http-01 challenge for welaunch.io
http-01 challenge for welaunch.io
Input the webroot for welaunch.io: (Enter 'c' to cancel): /var/www/welaunch.io/www/

Select the webroot for welaunch.io:
-------------------------------------------------------------------------------
1: Enter a new webroot
2: /var/www/welaunch.io/www
-------------------------------------------------------------------------------
Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2
Waiting for verification...
Cleaning up challenges

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/welaunch.io/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/welaunch.io/privkey.pem
   Your cert will expire on 2018-06-27. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot
   again. To non-interactively renew *all* of your certificates, run
   "certbot renew"
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

Zertifikat einbinden

Um das Zertifikat einzubinden müsst ihr wie folgt eurer site-configs anpassen:

listen 443 ssl;
ssl_certificate /etc/letsencrypt/live/welaunch.io/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/welaunch.io/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

# Redirect non-https traffic to https
# if ($scheme != "https") {
#     return 301 https://$host$request_uri;
# }

Block 2 ist optional. Wenn ihr allen http traffic auf https umleiten wollt, kommentiert es einfach aus.

Zertifikate automatisch erneuern

Damit ihr nicht ständig eure Zertifikate händisch erneuern müsst, könnt ihr dafür einen Cronjob anlegen. Vorher solltet ihr aber mit Hilfe eines Dry-Runs prüfen ob der Renewal Prozess funktioniert:

certbot renew --dry-run

...
** DRY RUN: simulating 'certbot renew' close to cert expiry
**          (The test certificates below have not been saved.)

Congratulations, all renewals succeeded. The following certs have been renewed:

Wenn das funktioniert könnt ihr einen Cronjob dazu anlegen:

crontab -e

0 22 * * 0 certbot renew

Fertig – das wars auch schon.

Weitere mögliche Probleme

Ich hatte das Problem, dass durch das alte Certbot noch alte renewal configs vorhanden waren, die meinen nginx server gestoppt haben (error could not bind port already in use).

Behoben habe ich das ganze in dem ich zu aller erst alle alten Zertifikate mit Hilfe von certbot delete gelöscht habe. Danach solltet ihr unbedingt im Ordner /etc/letsencrypt/renewal nachgucken ob hier noch configs mit nginx start / stop sind. Löscht diese.

Falls euer Server wegen des Bind-Problems nicht mehr starten sollte, führt folgendes aus:

fuser -k 443/tcp
service nginx restart

Daniel Barenkamp

Founder and Creator of WeLaunch (formerly DB-Dzine).

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

×Close search
Suche