Beveiliging van communicatie en data is steeds meer van belang. Je wilt immers niet dat de communicatie tussen bezoekers en jouw website(s) door kwaadwillenden ingezien kan worden. Daarom is het uitermate belangrijk om gevoelige informatie zoals klantgegevens en betalingsgegevens via 'https'-verkeer te versleutelen. Om dit te doen zul je een SSL-certificaat moeten installeren op jouw VPS.
In dit artikel behandelen we de volgende onderdelen:
- Een Let's Encrypt SSL-certificaat installeren in Nginx (Centos Stream / AlmaLinux / Rocky Linux)
- Een Let's Encrypt SSL-certificaat installeren in Nginx (Ubuntu / Debian)
- Het Sectigo SSL-certificaat downloaden
- Het sectigo SSL-certificaat installeren in Nginx
- Voer de stappen in dit artikel uit als root-user, of gebruiker met sudo-rechten, tenzij anders aangegeven.
Vereisten:
- Een domeinnaam waarvan ten minste het A-record naar je VPS verwijst, vervang in de voorbeelden 'Example.com' door je eigen domeinnaam.
- Nginx geïnstalleerd met behulp van een van de volgende handleidingen: CentOS Stream, AlmaLinux & Rocky Linux / Ubuntu & Debian
Een Let's Encrypt SSL-certificaat installeren in Nginx (CentOS Stream, AlmaLinux, Rocky Linux)
Stap 1
Verbind met je VPS via SSH of de VPS-console.
Stap 2
Installeer de EPEL (Extra packages for Enterprise Linux) repository:
dnf -y install epel-release
Stap 3
Installeer nu 'Let's Encrypt' met het volgende commando:
dnf -y install certbot python3-certbot-nginx
Stap 4
Genereer een Let's Encrypt certificaat met het commando:
certbot --nginx -d example.com -d www.example.com
Dit commando genereert een Let's Encrypt-certificaat. Waarbij -d wordt gebruikt om de domeinnamen op te geven waarvoor je het certificaat wil genereren.
Als dit de eerste keer is dat je certbot uitvoert wordt er gevraagd om een e-mailadres en om akkoord te gaan met de Terms of Service. Hierna controleert Certbot of je domein naar de server verwijst waar vandaan het certificaat wordt aangevraagd.
Als dit is gelukt, vraagt certbot hoe je de HTTPS-instellingen wilt:
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):
No redirect: Hierbij kun je jouw website nog zowel via http:// als via https:// bereiken.
Redirect: Hierbij wordt er een permanente redirect toegevoegd van http:// naar https://, alle bezoekers komen dan ook op https://example.com uit (we raden deze optie aan omdat hiermee je website beter beveiligd is).
Wanneer je deze keuze heb gemaakt en je klikt op Enter dan krijg je een melding dat het SSL-certificaat succesvol is geïnstalleerd. Wanneer je nu naar https://example.com zie je jouw website volledig beveiligd zien.
Stap 5
Een Let's Encrypt SSL-certificaat is standaard voor 3 maanden geldig en je zult deze dan ook elke 3 maanden moeten verlengen, maar via een cronjob kun je dit automatisch regelen. Open de 'crontab' van jouw user via:
crontab -e
Vervolgens voeg je in de crontab het volgende toe:
0 0 1 * * certbot renew >> /var/log/letsencrypt-renew.log
Sla deze wijzingen op en sluit het bestand (Esc > : > WQ > Enter). Vanaf dit moment wordt elke maand de Let's Encrypt-certificaten vernieuwd (een certificaat kan pas echt vernieuwd worden wanneer deze binnen 30 dagen verloopt, maar de cronjob zal er voor zorgen dat dit op tijd gebeurt).
Een Let's Encrypt SSL-certificaat installeren in Nginx (Ubuntu / Debian)
Stap 1
Voor je Let's Encrypt kunt installeren, heb je de ppa:certbot repository nodig:
add-apt-repository ppa:certbot/certbot
Stap 2
Installeer Certbot vervolgens met de Nginx-plugin:
apt-get -y install certbot python3-certbot-nginx
Stap 3
Genereer een Let's Encrypt certificaat met het commando:
certbot --nginx -d example.com -d www.example.com
Dit commando genereert een Let's Encrypt-certificaat. Waarbij -d wordt gebruikt om de (sub)domeinnamen op te geven waarvoor je een certificaat wil genereren.
Als dit de eerste keer is dat je certbot uitvoert wordt er gevraagd om een e-mailadres en om akkoord te gaan met de Terms of Service. Hierna controleert Certbot of je domein naar de server verwijst waar vandaan het certificaat wordt aangevraagd.
Als dit is gelukt, vraagt certbot hoe je de HTTPS-instellingen wilt:
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):
No redirect: Hierbij kun je jouw website nog zowel via http:// als via https:// bereiken.
Redirect: Hierbij wordt er een permanente redirect toegevoegd van http:// naar https://, alle bezoekers komen dan ook op https://example.com uit (we raden deze optie aan omdat hiermee je website beter beveiligd is).
Wanneer je deze keuze hebt gemaakt en je klikt op 'Enter' dan krijg je een melding dat het SSL-certificaat succesvol is geïnstalleerd. Wanneer je nu naar https://example.com gaat is jouw website volledig beveiligd te zien.
Stap 4
Een Let's Encrypt SSL-certificaat is standaard voor drie maanden geldig en je zult deze dan ook elke drie maanden moeten verlengen. Het geïnstalleerde Certbot pakket zorgt ervoor dat het SSL-certificaat 30 dagen voor dat het verlengt moet worden, automatisch wordt vernieuwd.
Je kunt de huidige status van de timer zien door:
systemctl status certbot.timer
Het Sectigo SSL-certificaat downloaden
Mocht je je eigen SSL-certificaat al op je VPS hebben staan, dan kun je direct door naar het SSL-certificaat installeren. De volgende stappen voer je uit in het TransIP-controlepaneel:
Stap 1
Ga in het controlepaneel naar 'Domein & Hosting' en klik op de domeinnaam (niet selecteren) welke het SSL-certificaat heeft.
Stap 2
Scroll aan de rechterkant naar het kopje 'SSL-certificaten' en klik op 'Beheren' achter de naam van het SSL-certificaat.
Stap 3
Klik in het overzicht op 'Downloaden'.
Stap 4
Voer de passphrase in van jouw SSL-certificaat en klik op 'Ontsleutelen'.
Wanneer je voor 'Versleuteld downloaden' kiest, dan is de private key nog versleuteld. Deze kun je eventueel zelf via 'OpenSSL' ontsleutelen. Eventueel vind je hier een handleiding over het ontsleutelen van een private key via OpenSSL.
Stap 5
Open het zip-bestand dat je zojuist hebt gedownload. Hier zie je een viertal bestanden in terug:
- cabundle.crt (de root- en intermediate certificaten)
- certificate.crt (het SSL-certificaat zelf)
- certificate.key (de private key van het certificaat)
- certificate.p7b (het SSL-certificaat in PKCS#7-formaat, deze heb je in de meeste gevallen niet nodig)
Stap 6
De drie eerste bestanden uit stap 5 zijn nodig voor de installatie van het SSL-certificaat. Pak deze bestanden uit in een map naar keuze (zolang je deze uiteraard maar onthoud). De meeste besturingssystemen kunnen standaard een .zip-bestand al uitpakken, maar uiteraard kun je ook een los programma zoals 7zip, Winrar of Winzip gebruiken.
Het sectigo SSL-certificaat installeren in Nginx
Het is van belang dat je de bestanden van het SSL-certificaat (zie vorige paragraaf), upload naar je VPS. Je kunt hiervoor bijvoorbeeld SFTP via FileZilla voor gebruiken: de meeste besturingssystemen waar SSH op is ingeschakeld ondersteunen SFTP out-of-the-box. Een alternatief is dat je de bestanden van je SSL-certificaten op je lokale computer/laptop opent, de inhoud kopieert en plakt waar relevant in de volgende stappen.
Stap 1
Maak een folder voor de SSL-certificaten aan op een plek naar keuze, bijvoorbeeld:
mkdir -p /etc/pki/nginx/example.com
De Root-user word automatisch eigenaar van deze directory, je kunt dus niet als willekeurige gebruiker de SSL-certificaten hier in plaatsen.
Stap 2
Verbind met de FTP-server met, indien mogelijk, dezelfde gebruiker waar je de rest van de stappen in deze handleiding mee doorloopt.
Ga naar de net aangemaakte directory:
/etc/pki/nginx/example.com
Upload de drie relevante bestanden naar de map voor de SSL-certificaten die je in de vorige stap hebt aangemaakt. Het gaat om certificate.key, certificate.crt en cabundle.crt.
Sluit je FTP-programma en ga terug naar je VPS.
Stap 3
Heb je in stap 2 je certificates geupload met een andere gebruiker dan waarmee je deze stap doorloopt? Dan is die gebruiker eigenaar van de /etc/pki/nginx folder. Maak dan eerst je huidige gebruiker eigenaar van de folder:
sudo chown <gebruikersnaam>:<gebruikersnaam>
Voeg nu het cabundle.crt en het certificate.crt bestand samen:
cd /etc/pki/nginx/example.com
(cat certificate.crt; echo ""; cat cabundle.crt) >> ssl-bundle.crt
Stap 4
Om het SSL-certificaat te kunnen gebruiken, is een aanpassing van het Nginx-serverblock nodig.
Open het .conf-bestand:
nano /etc/nginx/conf.d/example.com.conf
Pas het bestand aan naar het voorbeeld en vervang example.com door je eigen domeinnaam:
server {
root /var/www/example.com/html;
index index.php index.html index.htm index.nginx-debian.html;
server_name example.com www.example.com;
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/run/php-fpm/www.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
listen [::]:443 ssl ipv6only=on;
listen 443 ssl;
ssl_certificate /etc/pki/nginx/example.com/ssl-bundle.crt; #$
ssl_certificate_key /etc/pki/nginx/example.com/certificate.key;$
ssl_prefer_server_ciphers on;
}
## OCSP Stapling
resolver 127.0.0.1;
ssl_stapling on;
ssl_ssl_stapling_verify on;
ssl_trusted_certificate /etc/pki/nginx/example.com/ssl-bundle.crt;
server {
if ($host = example.com) {
return 301 https://$host$request_uri;
}
listen 80;
listen [::]:80;
server_name example.com www.example.com;
return 404;
}
Sla je wijziging op en sluit nano (ctrl + x > y > enter).
Stap 5
Herstart tot slot Nginx:
systemctl restart nginx
Je kunt de status controleren met een van de volgende commando's:
systemctl status nginx
nginx -t
Stap 6
Een SSL-certificaat is maximaal drie maanden geldig, voor het certificaat verloopt ontvang je een herinnering per e-mail. Wanneer je een nieuw certifcaat bestelt en ontvangen hebt, doorloop je stap 2, 3 & 5 in deze paragraaf opnieuw om je nieuwe certifcaat te gebruiken.
Hiermee zijn we aan het eind gekomen van deze handleiding voor het installeren van een SSL-certificaat in Nginx.
Mocht je aan de hand van dit artikel nog vragen hebben, aarzel dan niet om onze supportafdeling te benaderen. Je kunt hen bereiken via de knop 'Neem contact op' onderaan deze pagina.