SSL (staat voor secure socket layer) is een webprotocol dat het verkeer tussen server en client veilig maakt door het te versleutelen. Server en clients verzenden het verkeer veilig zonder het risico dat communicatie door derden wordt geïnterpreteerd. Het helpt de klant ook om de identiteit te verifiëren van de website waarmee ze communiceren.
In dit bericht zullen we beschrijven hoe je SSL instelt voor Nginx. We zullen de procedure demonstreren met behulp van het zelfondertekende certificaat. Een zelfondertekend certificaat versleutelt alleen de verbinding, maar valideert niet de identiteit van uw server. Daarom mag het alleen worden gebruikt voor testomgevingen of voor interne LAN-services. Voor de productieomgeving is het beter om de certificaten te gebruiken die zijn ondertekend door CA (certificeringsinstantie).
Vereisten
Voor deze functie moet je aan de volgende vereisten voldoen:
- Nginx is al op uw machine geïnstalleerd
- Serverblok geconfigureerd voor uw domein
- Gebruiker met sudo-rechten
De procedure die hier wordt uitgelegd, is uitgevoerd op: Debian 10 (Buster) machine.
Stap 1: Een zelfondertekend certificaat genereren
Onze eerste stap is het genereren van een zelfondertekend certificaat. Geef de onderstaande opdracht in Terminal om CSR (Certificate Signing Request) en een sleutel te genereren:
$ sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/selfsigned-nginx.key -out /etc/ssl/certs/selfsigned-nginx.crtU wordt gevraagd om wat informatie op te geven, zoals uw landnaam, staat, plaats, algemene naam (uw domeinnaam of IP-adres) en e-mailadres.
In de bovenstaande opdracht maakt OpenSSL de volgende twee bestanden:
- MVO: zelfondertekend-nginx.crt in de in de /etc/ssl/cert/ map
- Sleutel: zelfondertekend-nginx.sleutel in de /etc/ssl/private map
Maak nu de dhparam.pem-bestand met behulp van de onderstaande opdracht:
$ sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048Stap 2: Nginx configureren om SSL te gebruiken
In de vorige stap hebben we de CSR en de sleutel. In deze stap zullen we de Nginx configureren om SSL te gebruiken. Hiervoor zullen we een configuratiefragment maken en informatie toevoegen over onze SSL-certificaatbestanden en sleutellocaties.
Voer de onderstaande opdracht uit in Terminal om een nieuw configuratiefragment te maken zelfondertekend.conf bestand in de /etc/nginx/fragmenten.
$ sudo nano /etc/nginx/snippets/self-signed.confVoeg in het bestand de volgende regels toe:
ssl_certificate /etc/ssl/certs/selfsigned-nginx.crt;ssl_certificate_key /etc/ssl/private/selfsigned-nginx.sleutel;
De ssl_certificaat ingesteld op zelfondertekend-nginx.crt (certificaatbestand) terwijl de ssl_certificate_key ingesteld op zelfondertekend-nginx.sleutel (sleutelbestand).
Bewaar en sluit de zelfondertekend.conf het dossier.
Nu gaan we een ander fragmentbestand maken ssl-params.conf en configureer enkele basis SSL-instellingen. Geef de onderstaande opdracht in Terminal om de . te bewerken ssl-params.conf het dossier:
$ sudo nano /etc/nginx/snippets/ssl-params.confVoeg de volgende inhoud toe aan het bestand:
ssl_protocols TLSv1.2;ssl_prefer_server_ciphers aan;
ssl_dhparam /etc/ssl/certs/dhparam.pem;
ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES84;
ssl_ecdh_curve secp384r1;
ssl_session_timeout 10m;
ssl_session_cache gedeeld:SSL:10m;
ssl_session_tickets uit;
# ssl_nieten aan;
# ssl_stapling_verify aan;
oplosser 8.8.8.8 8.8.4.4 geldig=300s;
resolver_timeout 5s;
add_header X-Frame-Opties WEIGEREN;
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Bescherming "1; mode=blok";
Omdat we geen CA-ondertekend certificaat gebruiken, hebben we SSL-nieten uitgeschakeld. Als u een door een CA ondertekend certificaat gebruikt, verwijdert u de opmerkingen bij de ssl_nietling binnenkomst.
Stap 3: De Nginx configureren om SSL te gebruiken
Nu zullen we het Nginx-serverblokconfiguratiebestand openen om enkele configuraties te maken. In deze stap gaan we ervan uit dat u het serverblok al hebt ingesteld, dat er ongeveer zo uitziet:
serverluister 80;
luister [::]:80;
root /var/www/test.org/html;
indexindex.html-index.htm-index.nginx-debian.html;
servernaam test.org www.test.organisatie;
plaats /
try_files $uri $uri/ =404;
Gebruik de onderstaande opdracht om het configuratiebestand van het Nginx-serverblok te openen:
$ sudo nano /etc/nginx/sites-available/test.orgWijzig nu de bestaande server blok om het er als volgt uit te laten zien:
serverluister 443 ssl;
luister [::]:443 ssl;
inclusief fragmenten/zelfondertekend.conf;
include snippets/ssl-params.conf;
root /var/www/test.org/html;
indexindex.html-index.htm-index.nginx-debian.html;
servernaam test.org www.test.organisatie;
In de bovenstaande configuraties hebben we ook de SSL-fragmenten toegevoegd zelfondertekend.conf en ssl-params.conf die we eerder hebben geconfigureerd.
Voeg vervolgens a . toe tweede server blok.
serverluister 80;
luister [::]:80;
servernaam test.org www.test.organisatie;
retourneer 302 https://$server_name$request_uri;
In de bovenstaande configuratie:, retour 302 stuurt de HTTP om naar HTTPS.
Opmerking: Zorg ervoor dat u de test vervangt.org met uw eigen domeinnaam. Sla nu het bestand op en sluit het.
Stap 4: SSL-verkeer via firewall toestaan
Als een firewall op uw systeem is ingeschakeld, moet u SSL-verkeer erdoorheen toestaan. Nginx biedt je drie verschillende profielen met ufw. Je kunt ze bekijken met behulp van de onderstaande opdracht in Terminal:
$ sudo ufw app-lijstU ziet de volgende uitvoer met drie profielen voor het Nginx-verkeer:.
U moet het profiel "Nginx Full" in de firewall toestaan. Gebruik hiervoor het onderstaande commando:
$ sudo ufw 'Nginx Full' toestaanGebruik de onderstaande opdracht om te controleren of het profiel is toegestaan in de firewall:
$ sudo ufw-statusStap 5: Test het NGINX-configuratiebestand
Test nu het Nginx-configuratiebestand met behulp van de onderstaande opdracht in Terminal:
$ sudo nginx -tU zou de onderstaande uitvoer moeten zien:.
Maak nu de symbolische koppeling tussen beschikbare sites en ingeschakelde sites:
Start vervolgens de Nginx-service opnieuw om de configuratiewijzigingen toe te passen. Gebruik hiervoor de onderstaande opdracht:
$ sudo systemctl herstart nginxStap 6: SSL testen
Om nu de SSL te testen, navigeert u naar het volgende adres:
https://domein-of-IP-adres
Omdat we het zelfondertekende certificaat hebben ingesteld, zien we daarom een waarschuwing dat de verbinding niet veilig is. De volgende pagina verschijnt bij gebruik van de Mozilla Firefox-browser:.
Klik op de Geavanceerd knop.
Klik Voeg uitzondering toe.
Dan klikken Beveiligingsuitzondering bevestigen.
Nu ziet u uw HTTPS-site maar met een waarschuwingsbord (slot met een geel waarschuwingsbord) over de beveiliging van uw website.
Controleer ook of de omleiding correct werkt door uw domein of IP-adres te openen met http using.
http://domein-of-IP-adres
Als uw site nu automatisch omleidt naar HTTPS, betekent dit dat de omleiding correct werkte. Om de omleiding permanent te configureren, bewerkt u het configuratiebestand van het serverblok met de onderstaande opdracht in Terminal:
$ sudo nano /etc/nginx/sites-available/test.orgVerander nu het rendement 302 terugbrengen 301 in het bestand en sla het op en sluit het.
Zo kunt u SSL voor Nginx instellen in het Debian 10-systeem. We hebben het zelfondertekende certificaat opgesteld voor demonstratie. Zit je in een productieomgeving, ga dan altijd voor een CA certificaat.