Beveilig jouw Nginx website met Let’s Encrypt & Acme.sh

Geschatte leestijd: 3 min

Introductie

In deze tutorial leer je hoe je Let’s Encrypt voor Nginx op jouw Debian 8-instantie kan worden ingesteld. Met Let’s Encrypt kun je jouw webserver gratis beveiligen door gebruik te maken van HTTPS. Jouw certificaten worden automatisch verlengd dit betekent dat je webserver volledig is beveiligd nadat je de installatie hebt voltooid.

Hoewel Let’s Encrypt geen kant-en-klare plug-in voor Nginx heeft, maken we gebruik van acme.sh om het certificaat te genereren en te vernieuwen met behulp van een cron-taak.

Vereisten

We gaan ervan uit dat je al een Debian 8 instance hebt waarbij Nginx wordt uitgevoerd. Indien je dit niet hebt, dan kun je onze andere tutorials lezen voor deze installatie. We zullen gebruikmaken van acme.sh een handige commandoregeltool voor Let’s Encrypt en het ACME protocol. We refereren naar de huidige Ngix site als example.com en we gaan ervan uit dat dit draait vanuit /var/www/example.com

Stap 1: Installeer Acme.sh

We beginnen als eerst met de installatie van acme.sh, die we later zullen gebruiken om de afhandeling van het certificaat te automatiseren. Er zijn instructies op de Acme-website, maar het is eenvoudiger om het volgende commando uit te voeren:

curl https://get.acme.sh | sh

Laat de installer zijn werk doen nadat je het commando hebt uitgevoerd. Het is mogelijk dat je waarschuwingen krijgt maar zorg ervoor dat de installer compleet wordt uitgevoerd. Controleer of de installatie correct is uitgevoerd door de terminal opnieuw te openen en onderstaande commando uit te voeren:

acme.sh -v

Als het goed is heb je nu de informatie van deze versie. Je kunt nu verder met de installatie!

Stap 2: Configureer Nginx

We moeten nu Nginx instellen voor de certificaat check. Wannner je een certificaat aanvraagt bij Let’s Encrypt dan wordt er een controle uitgevoerd om te kijken of je de echte eigenaar bent. Dus wanneer de checks worden gedaan moet jouw Nginx configuratie dit kunnen aantonen.

We doen dat door een locatierichtlijn in de configuratie van Nginx in te stellen. We definiëren het in een apart bestand, genaamd:

# /etc/nginx/includes/letsencrypt-webroot

location /.well-known/acme-challenge/ {

   alias /var/www/example.com/.well-known/acme-challenge/;

}

In de belangrijkste configuratiebestand van Nginx kun je de volgende locatierichtlijn opnemen: Bewerk /etc/nginx/sites-enabled/default (als je een aangepaste configuratie gebruikt, dan jouw belangrijkste Nginx-configuratiebestand). Voeg de volgende regel toe om de bovenstaande richtlijn op te nemen:

# /etc/nginx/sites-enabled/default

server {

   listen 80;

   server_name example.com;

   # other config content here

...

   # Let's Encrypt webroot

   include includes/letsencrypt-webroot;

}

Stap 3: Certifcaat verkijgen

Nu we de voorgaande stappen hebben geregeld, moeten we alleen nog het certificaat verkrijgen! Voer het volgende acme.sh commando uit:

acme.sh --issue -d www.example.com -d example.com -w /var/www/example.com

Dit commando zal de certificaten genereren voor de root domein en www subdomein. Als alles goed is gegaan, zie je nu de certificaten en de bijbehorende bestanden in jouw werkmap. 

Indien dit commando niet werkt dan kan dat komen vanwege de instellingen van je rechten. Mocht je een foutmelding krijgen die aangeeft dat acme de vereiste bestanden niet kan maken, dat moet je deze rechten instellen, zodat je kunt schrijven naar /var/www/example.com met de acme gebruiker waarop je het acme-script runt.

Stap 4: HTTPS Serving instellen

Nadat je een certificaat hebt gegenereerd, moet Nginx hiervan op de hoogte zijn zodat je het kunt gebruiken om je website te beveiligen. De volledige instructies staan op de Nginx-website en zijn afhankelijk van jouw individuele configuratie. Het basisidee is echter om het certificaat op een bekende locatie te plaatsen en Nginx te vertellen waar het te vinden is.

Maak om te beginnen een Nginx-certificaten directory aan als deze nog niet bestaat, voer het onderstaande commando uit:

mkdir -p /etc/nginx/certs/example.com

Verplaats vervolgens jouw certificaatbestanden die in stap 3 door acme.sh zijn gemaakt naar de nieuwe map door het onderstaande commando uit te voeren:

mv *.pem /etc/nginx/certs/example.com

Bewerk ten slotte jouw Nginx-configuratie om naar de nieuwe certificaatbestanden te wijzen:

server {

   listen              443 ssl;

   server_name         www.example.com;

   ssl_certificate  /etc/nginx/certs/example.com/fullchain.pem;

   ssl_certificate_key /etc/nginx/certs/example.com/privkey.pem;

   ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;

   ssl_ciphers         HIGH:!aNULL:!MD5;

   ...

}

Voer sudo systemctl nginx configtest uit om er zeker van te zijn dat jouw syntaxis correct is en dat alles klopt. Voer vervolgens sudo systemctl nginx reload uit om de nieuwe configuratie te gebruiken.

Stap 5: Certificaten automatisch vernieuwen

Je kunt acme.sh instellen om een cron-taak uit te voeren en om je certificaten automatisch te vernieuwen. Je kunt met slechts één acme-opdracht een cron-taak instellen die controleert of je Nginx moeten vernieuwen, en opnieuw laden. De commando is vrij eenvoudig:

acme.sh --install-cert -d example.com --cert-file /etc/nginx/certs/example.com/cert --key-file /etc/nginx/certs/example.com/key --fullchain-file /etc/nginx/certs/example.com/fullchain  --reloadcmd "systemctl reload nginx.service"

Om te controleren of het werk kun je kijken naar je crontab met crontab -l en bevestig dat je de acme.sh entry kunt zien.

Conclusie

Als het goed is heb je nu een certificaat verkegen met Acme.sh op jouw Nginx-server voor jouw domein. Acme controleert dagelijks of je certificaat verlengd moet worden om ervoor te zorgen dat je site veilig blijft!

Was dit artikel nuttig?
Niet leuk 0
Weergaven: 457

Reader Interactions

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *