Hoe Nginx beveiligen met Let’s Encrypt op Ubuntu 20.04

Introductie

Let’s Encrypt is een Certificate Authority (CA) die een eenvoudige manier biedt om gratis TLS/SSL-certificaten te verkrijgen en te installeren, waardoor versleuteld HTTPS op webservers mogelijk wordt. Het vereenvoudigt het proces door een softwareclient, Certbot genaamd, te bieden die probeert de meeste (zo niet alle) benodigde stappen te automatiseren. Momenteel is het hele 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 Ubuntu 20.04 en je certificaat zo instellen dat het automatisch wordt vernieuwd.

Deze tutorial zal een apart Nginx-serverconfiguratiebestand gebruiken in plaats van het standaardbestand. We raden aan om nieuwe Nginx-serverblokbestanden te maken voor elk domein omdat dit helpt om veelvoorkomende fouten te voorkomen en de standaardbestanden te behouden als een fallback-configuratie.

Laat DigitalOcean zich zorgen maken over het beheren van Nginx en Let’s Encrypt. DigitalOcean App Platform stelt je in staat om rechtstreeks vanuit GitHub te implementeren in enkele minuten. App Platform zal ook SSL-certificaten en routering voor je afhandelen.

Vereisten

Om deze handleiding te volgen, heb je nodig:

  • Een Ubuntu 20.04-server die is ingesteld door deze oorspronkelijke serverconfiguratie voor Ubuntu 20.04 handleiding te volgen, inclusief een sudo-geactiveerde niet-root-gebruiker en een firewall.

  • Een geregistreerde domeinnaam. Deze handleiding zal example.com gebruiken. Je kunt een domeinnaam kopen bij Namecheap, er een gratis krijgen bij Freenom, of de domeinregistrar van je keuze gebruiken.

  • Beide van de volgende DNS-records ingesteld voor je server. Als je DigitalOcean gebruikt, zie dan onze DNS-documentatie voor details over hoe je ze kunt toevoegen.

    • Een A-record met example.com dat wijst naar het publieke IP-adres van je server.
    • Een A-record met www.example.com dat wijst naar het publieke IP-adres van je server.
  • Nginx geïnstalleerd door Hoe Nginx te installeren op Ubuntu 20.04 te volgen. Zorg ervoor dat u een serverblok heeft voor uw domein. Deze handleiding zal /etc/nginx/sites-available/example.com als voorbeeld gebruiken.

Stap 1 — Certbot installeren

De eerste stap om Let’s Encrypt te gebruiken om een SSL-certificaat te verkrijgen, is het installeren van de Certbot-software op uw server.

Installeer Certbot en de bijbehorende Nginx-plugin met apt:

  1. sudo apt install certbot python3-certbot-nginx

Certbot is nu klaar voor gebruik, maar om SSL automatisch te configureren voor Nginx, moeten we enkele configuraties van Nginx verifiëren.

Stap 2 — Bevestigen van de Nginx-configuratie

Certbot moet het juiste server-blok in uw Nginx-configuratie kunnen vinden om automatisch SSL te kunnen 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 stap voor het instellen van het serverblok in de Nginx-installatietutorial heeft gevolgd, zou u een serverblok voor uw domein moeten hebben op /etc/nginx/sites-available/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:

  1. sudo nano /etc/nginx/sites-available/example.com

Zoek de bestaande server_name-regel. Deze moet er zo uitzien:

/etc/nginx/sites-available/example.com
...
server_name example.com www.example.com;
...

Als dat het geval is, sluit dan uw editor af en ga verder met de volgende stap.

Als dit niet het geval is, werk het dan bij om overeen te komen. Sla vervolgens het bestand op, sluit je editor af en controleer de syntaxis van je configuratiebewerkingen:

  1. 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, herlaad Nginx om de nieuwe configuratie te laden:

  1. sudo systemctl reload nginx

Certbot kan nu het juiste server-blok vinden en het automatisch bijwerken.

Vervolgens zullen we de firewall bijwerken om HTTPS-verkeer toe te staan.

Stap 3 — HTTPS toestaan via de firewall

Als je de ufw-firewall hebt ingeschakeld, zoals aanbevolen door de vereiste handleidingen, moet je de instellingen aanpassen om HTTPS-verkeer toe te staan. Gelukkig registreert Nginx bij installatie enkele profielen bij ufw.

Je kunt de huidige instellingen zien door het volgende te typen:

  1. sudo ufw status

Het zal waarschijnlijk zo lijken, wat betekent dat alleen HTTP-verkeer naar de webserver wordt toegestaan:

Output
Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere Nginx HTTP ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Nginx HTTP (v6) ALLOW Anywhere (v6)

Om ook HTTPS-verkeer toe te laten, sta het Nginx Full-profiel toe en verwijder de overbodige toestemming voor het Nginx HTTP-profiel:

  1. sudo ufw allow 'Nginx Full'
  2. sudo ufw delete allow 'Nginx HTTP'

Je status zou er nu zo uit moeten zien:

  1. sudo ufw status
Output
Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere Nginx Full ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Nginx Full (v6) ALLOW Anywhere (v6)

Als laatste, laten we Certbot uitvoeren en onze certificaten ophalen.

Stap 4 — Het verkrijgen van een SSL-certificaat

Certbot biedt verschillende manieren om SSL-certificaten te verkrijgen via plugins. De Nginx-plugin zal zorgen voor het herconfigureren van Nginx en het herladen van de configuratie indien nodig. Om deze plugin te gebruiken, typ het volgende:

  1. sudo certbot --nginx -d example.com -d www.example.com

Dit voert certbot uit met de --nginx plugin, waarbij -d wordt gebruikt om de domeinnamen op te geven waarvoor het certificaat geldig moet zijn.

Als dit de eerste keer is dat u certbot uitvoert, wordt u gevraagd om een e-mailadres in te voeren en akkoord te gaan met de gebruiksvoorwaarden. Na het doen hiervan zal certbot communiceren met de Let’s Encrypt-server, vervolgens een uitdaging uitvoeren om te verifiëren dat u controle heeft over het domein waarvoor u een certificaat aanvraagt.

Als dat succesvol is, zal certbot vragen hoe u uw HTTPS-instellingen wilt configureren.

Output
Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1: No redirect - Make no further changes to the webserver configuration. 2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for new sites, or if you're confident your site works on HTTPS. You can undo this change by editing your web server's configuration. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Select the appropriate number [1-2] then [enter] (press 'c' to cancel):

Selecteer uw keuze en druk op ENTER. De configuratie wordt bijgewerkt en Nginx zal worden herladen om de nieuwe instellingen op te pikken. certbot zal eindigen met een bericht waarin staat dat het proces succesvol was en waar uw certificaten zijn opgeslagen:

Output
IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at: /etc/letsencrypt/live/example.com/fullchain.pem Your key file has been saved at: /etc/letsencrypt/live/example.com/privkey.pem Your cert will expire on 2020-08-18. To obtain a new or tweaked version of this certificate in the future, simply run certbot again with the "certonly" option. 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

Uw certificaten zijn gedownload, geïnstalleerd en geladen. Probeer uw website opnieuw te laden met https:// en let op de beveiligingsindicator van uw browser. Het zou moeten aangeven dat de site goed beveiligd is, meestal met een slotpictogram. Als u uw server test met de SSL Labs Server Test, krijgt deze een A graad.

Laten we eindigen met het testen van het vernieuwingsproces.

Stap 5 — Verifiëren van Certbot Automatische Vernieuwing

De certificaten van Let’s Encrypt zijn slechts geldig voor negentig dagen. Dit is om gebruikers aan te moedigen hun vernieuwingsproces van het certificaat te automatiseren. Het certbot-pakket dat we hebben geïnstalleerd, zorgt hiervoor door een systemd-timer toe te voegen die twee keer per dag wordt uitgevoerd en automatisch elk certificaat vernieuwt dat binnen dertig dagen verloopt.

U kunt de status van de timer opvragen met systemctl:

  1. sudo systemctl status certbot.timer
Output
● certbot.timer - Run certbot twice daily Loaded: loaded (/lib/systemd/system/certbot.timer; enabled; vendor preset: enabled) Active: active (waiting) since Mon 2020-05-04 20:04:36 UTC; 2 weeks 1 days ago Trigger: Thu 2020-05-21 05:22:32 UTC; 9h left Triggers: ● certbot.service

Om het vernieuwingsproces te testen, kunt u een droge run uitvoeren met certbot:

  1. sudo certbot renew --dry-run

Als u geen fouten ziet, bent u klaar. Wanneer nodig, zal Certbot uw certificaten vernieuwen en Nginx opnieuw laden om de wijzigingen op te halen. Als het geautomatiseerde vernieuwingsproces ooit mislukt, stuurt Let’s Encrypt een bericht naar het opgegeven e-mailadres om u te waarschuwen wanneer uw certificaat bijna verloopt.

Conclusie

In deze tutorial heb je de Let’s Encrypt-client certbot geïnstalleerd, SSL-certificaten gedownload voor je domein, Nginx geconfigureerd om deze certificaten te gebruiken, en automatische vernieuwing van certificaten ingesteld. Als je verdere vragen hebt over het gebruik van Certbot, is de officiële documentatie een goede plek om te beginnen.

Source:
https://www.digitalocean.com/community/tutorials/how-to-secure-nginx-with-let-s-encrypt-on-ubuntu-20-04