Hoe Apache secureteren met Let’s Encrypt op Ubuntu

Inleiding

Let’s Encrypt is een Certificaat Autoriteit (CA) die helpt bij het verkrijgen en installeren van gratis TLS/SSL-certificaten, waardoor het mogelijk wordt om gecodeerde HTTPS op web servers in te stellen. Het stroomlijnt het proces door het aanbieden van een softwareclient, Certbot, die probeert de meeste (indien niet alle) vereiste stappen te automatiseren. Op dit moment is het hele proces van het verkrijgen en installeren van een certificaat volledig geautomatiseerd zowel voor Apache als voor Nginx.

In deze gids gebruik je Certbot om een gratis SSL-certificaat voor Apache op Ubuntu te verkrijgen en ervoor te zorgen dat dit certificaat automatisch verlengd wordt.

Deze handleiding maakt gebruik van een aparte virtual host-bestand in plaats van het standaardconfiguratiebestand van Apache om de website in te stellen die door Let’s Encrypt wordt beveiligd. Wij bevelen aan om nieuwe Apache virtual host-bestanden voor elk domein dat op een server wordt gehost te maken, omdat dit helpt om veelvoorkomende fouten te vermijden en de standaardconfiguratiebestanden als fallback-configuratie behoudt.

Hoe u Apache kunt beveiligen met Let’s Encrypt op Ubuntu

  1. Installeer Certbot
  2. Controleer uw Apache Virtual Host-configuratie
  3. HTTPS toestaan door de firewall
  4. Verkrijg een SSL-certificaat
  5. Verifieer Certbot Auto-vernieuwing

Vereisten

Om deze handleiding te volgen, heb je nodig:

  • Een Ubuntu-server ingesteld met een niet-root-gebruiker met sudo-beheerdersrechten en een geactiveerde firewall. Je kunt dit instellen door onze handleiding voor de initiële serverinstelling voor Ubuntu te volgen.

  • Een volledig geregistreerde domeinnaam. Deze handleiding gebruikt your_domain als voorbeeld. Je kunt een domeinnaam aankopen op Namecheap, krijg er één gratis op Freenom, of gebruik de domeinregistratieprovider van je keuze.

  • De volgende twee DNS-records moeten voor uw server worden ingesteld. U kunt deze introductie voor DigitalOcean DNS volgen voor gedetailleerde informatie over hoe u deze kunt toevoegen.

    • Een A-record met uw_domein die verwijst naar het openbare IP-adres van uw server.
    • Een A-record met www.uw_domein die verwijst naar het openbare IP-adres van uw server.
  • Apache is geïnstalleerd door How To Install Apache on Ubuntu te volgen. Zorg ervoor dat u een virtuele hostbestand heeft voor uw domein. Deze handleiding gebruikt /etc/apache2/sites-available/uw_domein.conf als voorbeeld.

Stap 1 — Certbot installeren

Om een SSL-certificaat te verkrijgen met Let’s Encrypt, moet je de Certbot-software installeren op je server. Je gebruikt hiervoor de standaard Ubuntu-pakketbronnen.

First, updateer de lokale pakketindex:

  1. sudo apt update

Je hebt twee pakketten nodig: certbot en python3-certbot-apache. De laatste is een plugin die Certbot integreert met Apache, waardoor het mogelijk is om een certificaat te verkrijgen en HTTPS te configureren binnen je webserver met één enkele opdracht:

  1. sudo apt install certbot python3-certbot-apache

Je wordt gevraagd om de installatie te bevestigen door op Y te drukken, vervolgens op ENTER.

Certbot is nu geïnstalleerd op uw server. In de volgende stap verifieert u de configuratie van Apache om ervoor te zorgen dat uw virtuele host correct is ingesteld. Dit zorgt ervoor dat het certbot-clientscript uw domeinen kan detecteren en uw webserver automatisch kan herconfigureren om het nieuw gegenereerde SSL-certificaat te gebruiken.

Stap 2 — Controleren van uw Apache Virtuele Host Configuratie

Om automatisch SSL voor uw webserver te verkrijgen en te configureren, moet Certbot de juiste virtuele host vinden binnen uw Apache-configuratiebestanden. De domeinnaam(s) van uw server worden opgehaald uit de ServerName– en ServerAlias-directives die zijn gedefinieerd binnen uw VirtualHost-configuratieblok.

Als u de stap voor het instellen van de virtuele host in de Apache-installatiehandleiding heeft gevolgd, zou u een VirtualHost-blok moeten hebben ingesteld voor uw domein op /etc/apache2/sites-available/uw_domein.conf met de ServerName– en ServerAlias-directives al correct ingesteld.

Om dit te bevestigen, opent u het bestand van de virtuele host voor uw domein met nano of uw voorkeurs teksteditor:

  1. sudo nano /etc/apache2/sites-available/your_domain.conf

Vind de bestaande regels voor ServerName en ServerAlias. Ze moeten als volgt worden weergegeven:

/etc/apache2/sites-available/your_domain.conf
...
ServerName your_domain
ServerAlias www.your_domain
...

Als je al je ServerName en ServerAlias op deze manier hebt ingesteld, kun je je teksteditor sluiten en doorgaan naar de volgende stap. Als je huidige virtual host-configuratie niet overeenkomt met het voorbeeld, pas deze dan aan. Als je nano gebruikt, kun je afsluiten door op CTRL+X te drukken, vervolgens op Y en ENTER om je wijzigingen, indien aanwezig, te bevestigen. Vervolgens kun je het volgende commando uitvoeren om je wijzigingen te valideren:

  1. sudo apache2ctl configtest

Je zou Syntax OK moeten ontvangen als reactie. Als je een foutmelding krijgt, heropen dan het virtual host-bestand en controleer op eventuele typfouten of ontbrekende tekens. Zodra de syntaxis van je configuratiebestand correct is, laad Apache opnieuw om de wijzigingen door te voeren:

  1. sudo systemctl reload apache2

Met deze wijzigingen zal Certbot in staat zijn om het juiste VirtualHost-blok te vinden en deze bij te werken.

Hierna ga je de firewall bijwerken om HTTPS-verkeer toe te staan.

Stap 3 — HTTPS Verkeer Toestaan door de Firewall

Als je de UFW firewall hebt ingeschakeld, zoals aanbevolen in de prerequisite-gidsen, moet je de instellingen aanpassen om HTTPS-verkeer toe te staan. Bij de installatie registreert Apache verschillende UFW-applicatieprofielen. Je kunt het Apache Full-profiel gebruiken om zowel HTTP- als HTTPS-verkeer op je server toe te staan.

Om te controleren welk verkeer momenteel toegestaan is op uw server, controleert u de status:

  1. sudo ufw status

Als u een van onze Apache-installatiehandleidingen heeft gevolgd, ziet u een uitvoer vergelijkbaar met het volgende, wat betekent dat alleen HTTP-verkeer op poort 80 momenteel is toegestaan:

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

Om HTTPS-verkeer toe te staan, stelt u de “Apache Full”-profiel in:

  1. sudo ufw allow 'Apache Full'

Verwijder vervolgens het overbodige “Apache”-profiel:

  1. sudo ufw delete allow 'Apache'

Uw status zal als volgt worden weergegeven:

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

U bent nu klaar om Certbot uit te voeren en uw certificaten te verkrijgen.

Stap 4 — Het verkrijgen van een SSL-certificaat

Certbot biedt verschillende manieren om SSL-certificaten te verkrijgen via plugins. De Apache-plugin zorgt ervoor dat Apache opnieuw wordt geconfigureerd en de configuratie opnieuw wordt geladen wanneer dat nodig is. Om deze plugin te gebruiken, voert u het volgende uit:

  1. sudo certbot --apache

Dit script vraagt u om een reeks vragen te beantwoorden om uw SSL-certificaat te configureren. Eerst vraagt het u om een geldig e-mailadres. Dit e-mailadres wordt gebruikt voor verlengingsmeldingen en beveiligingsmededelingen:

Output
Saving debug log to /var/log/letsencrypt/letsencrypt.log Enter email address (used for urgent renewal and security notices) (Enter 'c' to cancel): you@your_domain

Na het verstrekken van een geldig e-mailadres, drukt u op ENTER om door te gaan naar de volgende stap. Vervolgens wordt u gevraagd om te bevestigen of u akkoord gaat met de servicevoorwaarden van Let’s Encrypt. U kunt bevestigen door op Y te drukken en vervolgens op ENTER:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
agree in order to register with the ACME server at
https://acme-v02.api.letsencrypt.org/directory
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: Y

Volgende zal je worden gevraagd of je je e-mail wilt delen met de Electronic Frontier Foundation om nieuws en andere informatie te ontvangen. Als je niet wilt abonneren op hun inhoud, schrijf N. Anders, schrijf Y en druk op ENTER om door te gaan naar de volgende stap:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let's Encrypt project and the non-profit
organization that develops Certbot? We'd like to send you email about our work
encrypting the web, EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: N

De volgende stap zal je vragen om Certbot te informeren welke domeinen je HTTPS wilt activeren. De vermelde domeinnamen worden automatisch verkregen uit je Apache virtual host configuratie, dus het is belangrijk om ervoor te zorgen dat je de juiste ServerName en ServerAlias instellingen hebt geconfigureerd in je virtual host. Als je HTTPS wilt inschakelen voor alle vermelde domeinnamen (aanbevolen), kun je de prompt leeg laten en op ENTER drukken om door te gaan. Anders, selecteer de domeinen waarvoor je HTTPS wilt inschakelen door elke juiste nummer op te lijsten, gescheiden door komma’s en/ of spaties, en druk vervolgens op ENTER:

Which names would you like to activate HTTPS for?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: your_domain
2: www.your_domain
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate numbers separated by commas and/or spaces, or leave input
blank to select all options shown (Enter 'c' to cancel): 

Na deze stap is de configuratie van Certbot klaar, en je krijgt de laatste opmerkingen te zien over je nieuwe certificaat en waar je de gegenereerde bestanden kunt vinden:

Output
Successfully 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-07-10. 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/apache2/sites-available/your_domain-le-ssl.conf Successfully deployed certificate for www.your_domain.com to /etc/apache2/sites-available/your_domain-le-ssl.conf Congratulations! You have successfully enabled HTTPS on https:/your_domain and https://www.your_domain.com - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 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 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Je certificaat is nu geïnstalleerd en geladen in de configuratie van Apache. Probeer je website te herladen met https:// en kijk naar de beveiligingsindicator van je browser. Het zou moeten aangeven dat je site correct beveiligd is, meestal door een slotpictogram in de adresbalk.

Je kunt de SSL Labs Server Test gebruiken om de graad van je certificaat te verifiëren en gedetailleerde informatie over het certificaat te verkrijgen, vanuit het perspectief van een externe service.

In de volgende en laatste stap ga je de automatische verlenging van Certbot testen, wat garandeert dat je certificaat automatisch wordt verlengd vóór de vervaldatum.

Stap 5 — Verifiëren van Certbot Auto-Verlenging

Let’s Encrypt-certificaten zijn alleen 90 dagen geldig. Dit is om gebruikers aan te moedigen hun certificaatverlengingsproces te automatiseren, evenals om ervoor te zorgen dat misbruikte certificaten of gestolen sleutels eerder verlopen dan later.

Het certbot-pakket dat je hebt geïnstalleerd zorgt voor verlengingen door een verlengingscript in te sluiten in /etc/cron.d, wat wordt beheerd door een systemctl-service genaamd certbot.timer. Dit script wordt twee keer per dag uitgevoerd en verlengt automatisch elk certificaat dat binnen 30 dagen van vervaldag ligt.

Om de status van deze service te controleren en ervoor te zorgen dat deze actief is, voer je het volgende uit:

  1. sudo systemctl status certbot.timer

Je uitvoer zal vergelijkbaar zijn met het volgende:

Output
● certbot.timer - Run certbot twice daily Loaded: loaded (/lib/systemd/system/certbot.timer; enabled; vendor preset:> Active: active (waiting) since Mon 2022-04-11 20:52:46 UTC; 4min 3s ago Trigger: Tue 2022-04-12 00:56:55 UTC; 4h 0min left Triggers: ● certbot.service Apr 11 20:52:46 jammy-encrypt systemd[1]: Started Run certbot twice daily.

Om het verlengingsproces te testen, kun je een droogloop uitvoeren met certbot:

  1. sudo certbot renew --dry-run
Output
Saving debug log to /var/log/letsencrypt/letsencrypt.log - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Processing /etc/letsencrypt/renewal/your_domain.conf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Account registered. Simulating renewal of an existing certificate for your_domain and www.your_domain.com - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Congratulations, all simulated renewals succeeded: /etc/letsencrypt/live/your_domain/fullchain.pem (success) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Als je geen fouten ontvangt, ben je klaar. Wanneer nodig, zal Certbot je certificaten verlengen en Apache opnieuw laden om de wijzigingen op te pakken. Als het geautomatiseerde verlengingsproces ooit mislukt, zal Let’s Encrypt een bericht sturen naar het e-mailadres dat je hebt opgegeven, en je waarschuwen wanneer je certificaat op het punt staat te verlopen.

Conclusie

In deze handleiding heb je de Let’s Encrypt-cliënt certbot geïnstalleerd, een SSL-certificaat voor je domein geconfigureerd en geïnstalleerd, en bevestigd dat de automatische vernieuwingservice van Certbot actief is binnen systemctl. Als je verdere vragen hebt over het gebruik van Certbot, is hun documentatie een goed startpunt.

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