Let's Encrypt
Deze pagina is vertaald door PageTurner AI (beta). Niet officieel goedgekeurd door het project. Een fout gevonden? Probleem melden →
Let's Encrypt is een dienst die gratis SSL/TLS-certificaten aan gebruikers verstrekt. Certbot is een client die dit eenvoudig realiseert en automatiseert. Bovendien bevat het plugins voor Apache en Nginx die certificaatgenerering nog verder vereenvoudigen.
Installatie-instructies voor de meeste Linux-distributies vind je op de Certbot-website.
Zodra de pakketten zijn geïnstalleerd, kun je een nieuw certificaat genereren.
Apache
Certbot Apache Plugin
Na installatie van Certbot en de Apache-plugin genereer je certificaten met deze opdracht:
certbot certonly --apache --noninteractive --agree-tos --email YOUR_EMAIL -d DOMAIN_NAME
Werk de secties 'SSLCertificateFile' en 'SSLCertificateKeyFile' bij en herstart de service.
Voeg een cron-taak toe voor automatische vernieuwing.
echo "0 0 * * * root certbot renew --quiet --no-self-upgrade --post-hook 'systemctl reload apache2'" | sudo tee -a /etc/cron.d/renew_certbot
Certbot Webroot
Debian
Werkt de Apache-plugin niet met jouw configuratie? Gebruik dan webroot.
Voeg dit toe aan je <VirtualHost>-sectie na configuratie als reverse proxy:
DocumentRoot /var/www/html/
#Do not pass the .well-known directory when using certbot and webroot
ProxyPass /.well-known !
Voer de certbot-opdracht uit als root:
sudo certbot certonly --webroot -w /var/www/html --agree-tos --email YOUR_EMAIL -d DOMAIN_NAME
Caddy
Caddy regelt automatisch het verkrijgen van SSL-certificaten van Let's Encrypt bij opgave van een domeinnaam. Geen handmatige actie nodig.
HAProxy
HAProxy heeft momenteel geen Certbot-plugin. Omzeil dit door Certbot in standalone-modus uit te voeren en verkeer via je netwerk te proxyen.
Activeer de frontend en backend in bovenstaande configuratie en voer Certbot uit.
certbot certonly --standalone --preferred-challenges http-01 --http-01-port 8888 --noninteractive --agree-tos --email YOUR_EMAIL -d DOMAIN_NAME
De poort is aanpasbaar, maar zorg dat de HAProxy-configuratie en je Certbot-opdracht overeenkomen.
HAProxy vereist dat certificaat- en sleutelbestanden in één bestand zijn samengevoegd. Gebruik hiervoor:
cat /etc/letsencrypt/live/DOMAIN_NAME/fullchain.pem /etc/letsencrypt/live/DOMAIN_NAME/privkey.pem > /etc/ssl/DOMAIN_NAME.pem
Decommentariseer bind *:443 en de redirect-sectie, herlaad daarna de service.
Automatische certificaatvernieuwing
Plaats dit script in /usr/local/bin/ voor automatische SSL-certificaatupdates:
SITE=DOMAIN_NAME
# move to the correct let's encrypt directory
cd /etc/letsencrypt/live/$SITE
# cat files to make combined .pem for haproxy
cat fullchain.pem privkey.pem > /etc/ssl/$SITE.pem
# reload haproxy
service haproxy reload
Zorg dat het script uitvoerbaar is:
chmod u+x /usr/local/bin/letsencrypt-renew.sh
Voeg een cron-taak toe voor automatische vernieuwing.
@monthly /usr/bin/certbot renew --renew-hook "/usr/local/bin/letsencrypt-renew.sh" >> /var/log/letsencrypt-renewal.log
Nginx
Na installatie van Certbot en de Nginx-plugin via sudo apt install certbot python3-certbot-nginx, genereer je het certificaat:
Opmerking: Voor Fedora-distributies (bijv. CentOS 8) installeer je de Nginx-plugin met sudo dnf install python3-certbot-nginx.
sudo certbot --nginx --agree-tos --redirect --hsts --staple-ocsp --email YOUR_EMAIL -d DOMAIN_NAME
Voeg --rsa-key-size 4096 toe voor een 4096-bits sleutel.
Kopieer het volledige Nginx-configuratievoorbeeld hierboven, pas parameters aan naar je setup en decommentariseer de regels.
Voeg een cron-taak toe voor automatische vernieuwing.
echo "0 0 * * * root certbot renew --quiet --no-self-upgrade --post-hook 'systemctl reload nginx'" | sudo tee -a /etc/cron.d/renew_certbot
Let's Encrypt en Docker
Dit gedeelte veronderstelt dat Jellyfin in een Docker-container draait (op Linux) en dat je Let's Encrypt óók in Docker wilt gebruiken. De Linuxserver/swag-container bevat een ingebouwde nginx-webserver voor reverse-proxyafhandeling.
linuxserver/letsencrypt is vervangen door linuxserver/swag. Raadpleeg de SWAG-migratiehandleiding op GitHub voor migratie-instructies.
Bepaal eerst het volgende:
-
ZORG ERVOOR DAT JE EEN CNAME-RECORD VOOR JELLYFIN BIJ JE DNS-PROVIDER HEBT VOORDAT JE VERDERGAAT
-
Waar je de informatie over Let's Encrypt wilt opslaan (in Docker worden deze "volumes" genoemd)
-
Welk subdomein of welke submap je wilt gebruiken met Let's Encrypt (bijv. jellyfin.voorbeeld.nl)
-
Welke tijdzone je wilt gebruiken
-
Of je HTTP-01 of DNS-01 wilt gebruiken voor validatie
-
Welk netwerk je gaat gebruiken (aanbevolen wordt het standaard macvlan-netwerk "br0")
-
Welk IP-adres je aan je container wilt toewijzen
-
Welke poorten je gaat gebruiken (bijv. 180 voor poort 80, en 1443 voor 443)
-
Zorg dat poort 80 (bij HTTP-validatie) en 443 vanuit je router worden doorgestuurd naar de Docker-container (instructies verschillen per fabrikant)
-
Als welke gebruiker de container moet draaien (je kunt PUID en PGID vinden met
id(vervang "user" door de gebruikersnaam)
Als je de DNS-01-validatie gebruikt, vind je de lijst met ondersteunde DNS-plug-ins in de Certbot-documentatie.
Afhankelijk van deze instellingen moet je de onderstaande waarden aanpassen.
Bijvoorbeeld, het docker create-commando van het LinuxServer-team voor de Swag-container:
docker create \
--name=swag \
--cap-add=NET_ADMIN \
-e PUID=1000 \
-e PGID=1000 \
-e TZ=Europe/London \
-e URL=example.com \
-e SUBDOMAINS=www, \
-e VALIDATION=http \
-e DNSPLUGIN=cloudflare `#optional` \
-e DUCKDNSTOKEN=<token> `#optional` \
-e EMAIL=<e-mail> `#optional` \
-e DHLEVEL=2048 `#optional` \
-e ONLY_SUBDOMAINS=false `#optional` \
-e EXTRA_DOMAINS=<extradomains> `#optional` \
-e STAGING=false `#optional` \
-p 443:443 \
-p 80:80 `#optional` \
-v </path/to/appdata/config>:/config \
--restart unless-stopped \
linuxserver/swag
Als ik dit sjabloon volg en aanpas voor mijn regio, poorten en pad, ziet het er zo uit (met persoonlijke informatie verwijderd):
docker create --name=swag --cap-add=NET_ADMIN -e PUID=1000 -e PGID=1000 -e TZ=America/Chicago -e URL=example.com -e SUBDOMAINS=jellyfin -e VALIDATION=http -e EMAIL=email@email.com -e DHLEVEL=2048 -e ONLY_SUBDOMAINS=false -e STAGING=false -p 443:443 -p 80:80 -v /path/to/appdata/swag/:/config --restart unless-stopped linuxserver/swag
Dit haalt de linuxserver/swag-container op en maakt hem aan met de opgegeven variabelen. Start daarna de container met docker start swag. Controleer of hij draait met docker ps, wat een uitvoer geeft zoals:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
09346434b8ea linuxserver/swag "/init" 2 minutes ago Up 5 seconds 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp swag
Ga nu naar het volume dat je hebt gekozen (in mijn voorbeeld is dat /mnt/swag). Navigeer dan naar nginx/proxy-confs in die map. Als je de inhoud opvraagt, zie je veel bestanden.
Voor Jellyfin gebruiken we jellyfin.subdomain.conf.sample (bij subdomein) of jellyfin.subfolder.conf.sample (bij submap). Kopieer het benodigde bestand en verwijder .sample (bijv. cp jellyfin.subdomain.conf.sample jellyfin.subdomain.conf). Open het bestand in een teksteditor.
Het zou er zo uit moeten zien (dit is jellyfin.subdomain.conf, jellyfin.subfolder.conf lijkt sterk):
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name jellyfin.*;
include /config/nginx/ssl.conf;
client_max_body_size 0;
location / {
include /config/nginx/proxy.conf;
resolver 127.0.0.11 valid=30s;
set $upstream_app jellyfin;
set $upstream_port 8096;
set $upstream_proto http;
proxy_pass $upstream_proto://$upstream_app:$upstream_port;
proxy_set_header Range $http_range;
proxy_set_header If-Range $http_if_range;
}
location ~ (/jellyfin)?/socket/ {
include /config/nginx/proxy.conf;
resolver 127.0.0.11 valid=30s;
set $upstream_app jellyfin;
set $upstream_port 8096;
set $upstream_proto http;
proxy_pass $upstream_proto://$upstream_app:$upstream_port;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $http_connection;
}
}
De regel waar we in geïnteresseerd zijn is set $upstream_app jellyfin. Als Jellyfin en Let's Encrypt in Docker op hetzelfde netwerk zitten, zou de reverse proxy automatisch moeten werken. Zo niet, vervang jellyfin door het IP-adres van je Jellyfin-server. Voeg ook een slash toe na 'socket' in location ~ (/jellyfin)?/socket, dus: location ~ (/jellyfin)?/socket/.
Ga dan in Jellyfin-instellingen (Dashboard → Netwerk) naar "Openbaar HTTP-poortnummer" en "Openbaar HTTPS-poortnummer". Zorg dat HTTP-poort 8096 is en HTTPS-poort 8920.
Herstart de Let's Encrypt-container met docker restart swag en volg de logs met docker logs -f swag. Als alles werkt, zie je aan het einde Server Ready, wat aangeeft dat Let's Encrypt correct draait.