Inleiding
Let’s Encrypt is een Certificate Authority (CA) die een toegankelijke manier biedt om gratis TLS/SSL-certificaten te verkrijgen en te installeren, waardoor versleutelde HTTPS op webservers mogelijk wordt. Het vereenvoudigt het proces door een softwareclient, Certbot genaamd, te leveren die probeert het grootste deel (zo niet alle) van de vereiste stappen te automatiseren. Momenteel is het gehele proces van het verkrijgen en installeren van een certificaat volledig geautomatiseerd op zowel Apache als Nginx.
In deze tutorial zul je Certbot gebruiken om een gratis SSL-certificaat te verkrijgen voor Nginx op Rocky Linux 9 en je certificaat instellen om automatisch te vernieuwen.
Deze tutorial zal een apart configuratiebestand voor een Nginx-server gebruiken in plaats van het standaardbestand. Je zou nieuwe Nginx-serverblokbestanden moeten aanmaken voor elk domein, omdat dit helpt om veelgemaakte fouten te vermijden en de standaardbestanden te behouden als een fallback-configuratie.
Vereisten
Om deze tutorial te volgen, heb je nodig:
-
Een Rocky Linux 9-server opgezet volgens deze initiële serverconfiguratie voor Rocky Linux 9 handleiding, inclusief een sudo-ingeschakelde niet-root-gebruiker en een firewall.
-
Een geregistreerde domeinnaam. Deze handleiding maakt gebruik van
example.com
als voorbeeld. U kunt een domeinnaam kopen bij Namecheap, er een gratis krijgen bij Freenom, of de domeinregistrar van uw keuze gebruiken. -
Beide van de volgende DNS-records ingesteld voor uw server. Als u DigitalOcean gebruikt, raadpleeg dan onze DNS-documentatie voor details over hoe u deze toevoegt.
- Een A-record met
example.com
dat verwijst naar het publieke IP-adres van uw server. - Een A-record met
www.example.com
dat verwijst naar het publieke IP-adres van uw server.
- Een A-record met
-
Nginx geïnstalleerd door de stappen te volgen in How To Install Nginx on Rocky Linux 9. Zorg ervoor dat u een serverblok heeft voor uw domein. Deze handleiding gebruikt
/etc/nginx/sites-available/example.com
als voorbeeld.
Stap 1 — Certbot installeren
Eerst moet u het certbot
softwarepakket installeren. Log in op uw Rocky Linux 8-machine als uw niet-rootgebruiker:
- ssh sammy@your_server_ip
Het certbot
-pakket is niet standaard beschikbaar via de pakketbeheerder. U moet het EPEL-repository inschakelen om Certbot te installeren.
Voeg de Rocky Linux 9 EPEL-repository toe met het volgende commando:
- sudo dnf install epel-release
Als u wordt gevraagd om de installatie te bevestigen, typ en druk op y
.
Nu u toegang heeft tot het extra repository, installeer alle benodigde pakketten:
- sudo dnf install certbot python3-certbot-nginx
Dit zal Certbot zelf en de Nginx-plugin voor Certbot installeren, die nodig is om het programma uit te voeren.
Het installatieproces zal u vragen om een GPG-sleutel te importeren. Bevestig dit, zodat de installatie kan worden voltooid.
Nu Certbot is geïnstalleerd, laten we het uitvoeren om een certificaat te verkrijgen.
Stap 2 — Bevestiging van de configuratie van Nginx
Certbot moet het juiste server
-blok in uw Nginx-configuratie kunnen vinden om automatisch SSL te configureren. Dit doet het specifiek door te zoeken naar een server_name
-instructie die overeenkomt met het domein waarvoor u een certificaat aanvraagt.
Als u de serverblokinstallatiestap in de Nginx-installatiehandleiding hebt gevolgd, zou u een serverblok voor uw domein moeten hebben op /etc/nginx/conf.d/voorbeeld.com
met de server_name
-instructie al juist ingesteld.
Om te controleren, opent u het configuratiebestand voor uw domein met nano
of uw favoriete teksteditor:
- sudo nano /etc/nginx/conf.d/example.com
Zoek de bestaande server_name
-regel. Het zou er zo uit moeten zien:
...
server_name example.com www.example.com;
...
Als dat het geval is, sluit uw editor af en ga door naar de volgende stap.
Als dat niet het geval is, werk het dan bij zodat het overeenkomt. Sla vervolgens het bestand op, sluit uw editor af en controleer de syntaxis van uw configuratiewijzigingen:
- sudo nginx -t
Als je een foutmelding krijgt, open dan het serverblokbestand opnieuw en controleer op eventuele typfouten of ontbrekende tekens. Zodra de syntaxis van je configuratiebestand correct is, laad je Nginx opnieuw om de nieuwe configuratie te laden:
- sudo systemctl reload nginx
Certbot kan nu het juiste server
-blok vinden en het automatisch bijwerken.
Vervolgens gaan we de firewall bijwerken om HTTPS-verkeer toe te staan.
Stap 3 — Bijwerken van de firewallregels
Aangezien je vooraf ingestelde setup firewalld
mogelijk maakt, moet je de firewall-instellingen aanpassen om externe verbindingen op je Nginx-webserver toe te staan.
Om te controleren welke services al zijn ingeschakeld, voer je het volgende commando uit:
- sudo firewall-cmd --permanent --list-all
Je krijgt output zoals dit:
Outputpublic
target: default
icmp-block-inversion: no
interfaces:
sources:
services: cockpit dhcpv6-client http ssh
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
Als je http
niet in de serviceslijst ziet staan, schakel je het in door het volgende uit te voeren:
- sudo firewall-cmd --permanent --add-service=http
Om https
-verkeer toe te staan, voer je het volgende commando uit:
- sudo firewall-cmd --permanent --add-service=https
Om de wijzigingen toe te passen, moet je de firewall-service opnieuw laden:
- sudo firewall-cmd --reload
Nu je je server hebt geopend voor https-verkeer, ben je klaar om Certbot uit te voeren en je certificaten op te halen.
Stap 4 — Het verkrijgen van een SSL-certificaat
Certbot biedt verschillende manieren om SSL-certificaten te verkrijgen via plug-ins. De Nginx-plugin zal zorgen voor het herconfigureren van Nginx en het opnieuw laden van de configuratie wanneer dat nodig is. Om deze plugin te gebruiken, typt u het volgende:
- sudo certbot --nginx -d example.com -d www.example.com
Dit voert certbot
uit met de --nginx
plugin, met gebruik van -d
om de domeinnamen op te geven waarvoor u het certificaat geldig wilt laten zijn.
Wanneer u het commando uitvoert, wordt u gevraagd een e-mailadres in te voeren en akkoord te gaan met de gebruiksvoorwaarden. Nadat u dit heeft gedaan, zou u een bericht moeten zien dat aangeeft dat het proces succesvol is verlopen en waar uw certificaten zijn opgeslagen:
OutputSuccessfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/your_domain/fullchain.pem
Key is saved at: /etc/letsencrypt/live/your_domain/privkey.pem
This certificate expires on 2022-12-15.
These files will be updated when the certificate renews.
Certbot has set up a scheduled task to automatically renew this certificate in the background.
Deploying certificate
Successfully deployed certificate for your_domain to /etc/nginx/conf.d/your_domain.conf
Successfully deployed certificate for www.your_domain to /etc/nginx/conf.d/your_domain.conf
Congratulations! You have successfully enabled HTTPS on https://your_domain and https://www.your_domain
…
Uw certificaten worden gedownload, geïnstalleerd en geladen, en uw Nginx-configuratie zal nu automatisch alle webverzoeken doorsturen naar https://
. Probeer uw website opnieuw te laden en let op de beveiligingsindicator van uw browser. Deze zou moeten aangeven dat de site goed beveiligd is, meestal met een hangslotsymbool. Als u uw server test met de SSL Labs Server Test, krijgt deze een A-beoordeling.
Laten we eindigen door het vernieuwingsproces te testen.
Stap 5 — Verifiëren van Certbot Automatische Vernieuwing
Let’s Encrypt-certificaten zijn 90 dagen geldig, maar het wordt aanbevolen om de certificaten elke 60 dagen te vernieuwen om een foutmarge toe te staan. De Certbot Let’s Encrypt-client heeft een renew
-opdracht die automatisch de momenteel geïnstalleerde certificaten controleert en probeert ze te vernieuwen als ze minder dan 30 dagen van de vervaldatum verwijderd zijn.
U kunt de automatische vernieuwing van uw certificaten testen door deze opdracht uit te voeren:
- sudo certbot renew --dry-run
De uitvoer zal vergelijkbaar zijn met dit:
OutputSaving debug log to /var/log/letsencrypt/letsencrypt.log
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Processing /etc/letsencrypt/renewal/your_domain.conf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Cert not due for renewal, but simulating renewal for dry run
Plugins selected: Authenticator nginx, Installer nginx
Renewing an existing certificate
Performing the following challenges:
http-01 challenge for monitoring.pp.ua
Waiting for verification...
Cleaning up challenges
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
new certificate deployed with reload of nginx server; fullchain is
/etc/letsencrypt/live/your_domain/fullchain.pem
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
** 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:
/etc/letsencrypt/live/your_domain/fullchain.pem (success)
...
Merk op dat als u een gebundeld certificaat heeft gemaakt met meerdere domeinen, alleen de basisdomeinnaam zal worden weergegeven in de uitvoer, maar de vernieuwing zal werken voor alle domeinen die in dit certificaat zijn opgenomen.
A practical way to ensure your certificates will not get outdated is to create a cron
job that will periodically execute the automatic renewal command for you. Since the renewal first checks for the expiration date and only executes the renewal if the certificate is less than 30 days away from expiration, it is safe to create a cron job that runs every week, or even every day.
Bewerk de crontab om een nieuwe taak te maken die de vernieuwing tweemaal per dag uitvoert. Om de crontab voor de rootgebruiker te bewerken, voert u het volgende uit:
- sudo crontab -e
Uw teksteditor opent de standaard crontab, die op dit moment een leeg tekstbestand is. Ga naar de invoegmodus door op i
te drukken en voeg de volgende regel toe:
0 0,12 * * * python -c 'import random; import time; time.sleep(random.random() * 3600)' && certbot renew --quiet
Als u klaar bent, drukt u op ESC
om de invoegmodus te verlaten, vervolgens :wq
en ENTER
om het bestand op te slaan en te verlaten. Om meer te weten te komen over de teksteditor Vi en zijn opvolger Vim, bekijk onze Installeren en Gebruiken van de Vim Teksteditor op een Cloudserver-handleiding.
Dit zal een nieuwe cron-taak maken die elke dag om twaalf uur ’s middags en middernacht wordt uitgevoerd. python -c 'import random; import time; time.sleep(random.random() * 3600)'
zal een willekeurige minuut binnen het uur selecteren voor uw vernieuwingstaken.
De opdracht vernieuwen
voor Certbot controleert alle certificaten die op het systeem zijn geïnstalleerd en werkt eventuele certificaten bij die binnen minder dan dertig dagen verlopen. Met --quiet
vertelt Certbot om geen informatie weer te geven of te wachten op gebruikersinvoer.
Meer gedetailleerde informatie over vernieuwing is te vinden in de Certbot-documentatie.
Conclusie
In deze handleiding heb je de Let’s Encrypt-client Certbot geïnstalleerd, SSL-certificaten gedownload voor je domein, en automatische certificaatvernieuwing ingesteld. Als je vragen hebt over het gebruik van Certbot, kun je de officiële Certbot-documentatie raadplegen.
Je kunt ook de officiële Let’s Encrypt-blog controleren voor belangrijke updates van tijd tot tijd.