Zoeken op website

Hoe Nginx te beveiligen met SSL en Let's Encrypt in FreeBSD


In deze handleiding bespreken we hoe u de Nginx webserver in FreeBSD kunt beveiligen met TLS/SSL certificaten aangeboden door Let's Encrypt Certificate Autoriteit. We laten u ook zien hoe u de Lets’ Encrypt-certificaten automatisch kunt verlengen vóór de vervaldatum.

TLS, een acroniem voor Transport Layer Security, is een protocol dat draait onder het HTTP-protocol en certificaten en sleutels gebruikt om de pakketten in te kapselen en de gegevens coderen die worden uitgewisseld tussen een server en een client, of in dit geval tussen de Nginx webserver en de browser van de client, om de verbinding te beveiligen, zodat een derde partij, die verkeer zou kunnen onderscheppen, niet kan decoderen de transmissie.

Lees ook: Installeer Let's Encrypt voor Apache op FreeBSD

Het proces voor het verkrijgen van een gratis Let's Encrypt-certificaat in FreeBSD kan aanzienlijk worden vereenvoudigd door het clienthulpprogramma certboot te installeren, de officiële Let's Encrypt-client die wordt gebruikt voor het genereren en downloaden van certificaten.

Vereisten

  1. Installeer de FBEMP-stack (Nginx, MariaDB en PHP) in FreeBSD

Stap 1: Configureer Nginx TLS/SSL

1. Standaard is de TLS/SSL serverconfiguratie niet ingeschakeld in FreeBSD omdat de TLS server instructies blokkeert worden becommentarieerd in het standaardconfiguratiebestand van Nginx.

Om de TLS-server in Nginx te activeren, opent u het nginx.conf-configuratiebestand en zoekt u naar de regel die het begin van definieert SSL-server en update het hele blok zodat het eruitziet als in het onderstaande voorbeeld.

nano /usr/local/etc/nginx/nginx.conf

Nginx HTTPS-blokfragment:

server {
       listen 443 ssl  default_server;
       server_name  www.yourdomain.com;
	
	access_log /var/log/nginx/access.log;
	error_log /var/log/nginx/error.log;
	error_page   500 502 503 504  /50x.html;
        
	location = /50x.html {
            root   /usr/local/www/nginx-dist;
        }
	
	location / {
	    root   /usr/local/www/nginx;
       	    index  index.html index.htm;
	    try_files $uri $uri/ /index.php?$args;
				}

	ssl_certificate "/usr/local/etc/letsencrypt/live/www.yourdomain.com/cert.pem";
	ssl_certificate_key "/usr/local/etc/letsencrypt/live/www.yourdomain.com/privkey.pem";
	ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
	ssl_dhparam /usr/local/etc/nginx/dhparam.pem;
	ssl_session_cache shared:SSL:1m;
	ssl_session_timeout 10m;
	ssl_ciphers HIGH:!aNULL:!MD5;
	ssl_prefer_server_ciphers  on;

	# Use gzip compression
gzip on;
gzip_disable "msie6";
gzip_vary on;
gzip_proxied any;
gzip_comp_level 5;
gzip_buffers 16 8k;
gzip_http_version 1.0;

	# Set a variable to work around the lack of nested conditionals
	
	set $cache_uri $request_uri;
	
	location ~ /.well-known {
	allow all;
		}
    


        location ~ \.php$ {
        root	/usr/local/www/nginx;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        #fastcgi_param  SCRIPT_FILENAME /scripts$fastcgi_script_name;
        fastcgi_param SCRIPT_FILENAME $request_filename;    
		include        fastcgi_params;
        }	
    }

Het bovenstaande blok bevat, naast het SSL-blok, ook enkele instructies voor het inschakelen van gzip-compressie en FastCGI Process Manager, gebruikt voor het doorgeven van PHP-code aan PHP-FPM< gateway om dynamische webapplicaties uit te voeren.

Nadat u de bovenstaande code heeft toegevoegd aan het hoofdconfiguratiebestand van Nginx, mag u de daemon niet opnieuw opstarten of de instellingen toepassen voordat u een Let's Encrypt-certificaat voor uw domein heeft geïnstalleerd en verkregen.

Stap 2: Installeer Certbot Client in FreeBSD

2. Het proces van het installeren van het Let's Encrypt certbot clienthulpprogramma in FreeBSD omvat het downloaden van de broncode voor py-certbot en deze lokaal compileren, door het uitgeven de onderstaande opdrachten.

cd /usr/ports/security/py-certbot
make install clean

3. Het compileren van het hulpprogramma py-certbot kost veel tijd vergeleken met het installeren van een gewoon binair pakket. Gedurende deze tijd moet een reeks afhankelijkheden worden gedownload en lokaal in FreeBSD worden gecompileerd.

Er zal ook een reeks aanwijzingen op uw scherm verschijnen, waarin u wordt gevraagd te selecteren welke pakketten tijdens het compileren voor elke afhankelijkheid zullen worden gebruikt. Op het eerste scherm selecteert u de volgende hulpmiddelen, door op de [spatie]-toets te drukken, voor het compileren van de python27-afhankelijkheid, zoals geïllustreerd in de onderstaande afbeelding.

  • IPV6
  • LIBFFI
  • NLS
  • PYMALLOC
  • DRADEN
  • UCS4 voor Unicode-ondersteuning

4. Selecteer vervolgens DOCS en THREADS voor gettext-tools afhankelijkheid en druk op OK > om door te gaan zoals weergegeven in de onderstaande afbeelding.

5. Laat op het volgende scherm de optie TESTS uitgeschakeld voor libffi-3.2.1 en druk op OK om te verplaatsen verder.

6. Druk vervolgens op spatie om DOCS voor py27-enum34 afhankelijkheid te selecteren, waardoor de documentatie hiervoor wordt geïnstalleerd tool en druk op OK om door te gaan, zoals geïllustreerd in de onderstaande schermafbeelding.

7. Kies er ten slotte voor om voorbeeldvoorbeelden voor py27-openssl afhankelijkheid te installeren door op de [spatie] toets te drukken en op OK te drukken > om het compilatie- en installatieproces voor de py-certbot-client te voltooien.

8. Nadat het proces van het compileren en installeren van het hulpprogramma py-certbot is voltooid, voert u de onderstaande opdracht uit om het hulpprogramma te upgraden naar de nieuwste versie van het pakket, zoals geïllustreerd in de onderstaande schermafbeeldingen.

pkg install py27-certbot

9. Om bepaalde problemen te voorkomen, kan dit optreden bij het verkrijgen van een gratis Let's Encrypt-certificaat. De meest voorkomende fout is “pkg_resources.DistributionNotFound ” , zorg ervoor dat de volgende twee afhankelijkheden ook in uw systeem aanwezig zijn: py27-salt en py27-acme.

pkg install py27-salt
pkg install py27-acme

Stap 3: Installeer het Let's Encrypt-certificaat voor Nginx op FreeBSD

10. Om een zelfstandig Let's Encrypt-certificaat voor uw domein te verkrijgen, voert u de volgende opdracht uit en geeft u uw domeinnaam en alle subdomeinen waarvoor u certificaten wilt verkrijgen op door de -d te impliceren vlag.

certbot certonly --standalone -d yourdomain.com -d www.yourdomain.com

11. Terwijl u het certificaat genereert, wordt u gevraagd uw e-mailadres in te voeren en akkoord te gaan met de servicevoorwaarden van Let's Encrypt. Typ a op het toetsenbord om akkoord te gaan en door te gaan. U wordt ook gevraagd of u uw e-mailadres wilt delen met Let's Encrypt-partners.

Als u uw e-mailadres niet wilt delen, typt u gewoon geen woord in de prompt en drukt u op de [enter]-toets om door te gaan. Nadat de certificaten voor uw domein succesvol zijn verkregen, ontvangt u enkele belangrijke opmerkingen waarin u wordt geïnformeerd waar de certificaten in uw systeem zijn opgeslagen en wanneer ze verlopen.

12. Als u een Let's Encrypt-certificaat wilt verkrijgen met behulp van de plug-in “webroot”, door de webroot map van de Nginx-server voor uw domein toe te voegen , voer het volgende commando uit met de vlaggen --webroot en -w. Als u het Nginx-webrootpad niet hebt gewijzigd, zou dit standaard in het /usr/local/www/nginx/ systeempad moeten staan.

certbot certonly --webroot -w /usr/local/www/nginx/ -d yourdomain.com -d www.yourdomain.com

Net als bij de --strandalone procedure voor het verkrijgen van een certificaat, zal de --webroot procedure u ook vragen een e-mailadres op te geven voor certificaatvernieuwing en veiligheidskennisgevingen. Druk vervolgens op a om akkoord te gaan met de algemene voorwaarden van Let's Encrypt en nee of ja om het e-mailadres van Let's Encrypt-partners wel of niet te delen, zoals geïllustreerd in het onderstaande voorbeeld.

Houd er rekening mee dat de certbot-client een vals e-mailadres kan detecteren en u niet laat doorgaan met het genereren van een certificaat totdat u een echt e-mailadres opgeeft.

Cerbot-monster:
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel):[email   #A fake email address will be detected
There seem to be problems with that address. Enter email address (used for
urgent renewal and security notices)  If you really want to skip this, you can
run the client with --register-unsafely-without-email but make sure you then
backup your account key from /etc/letsencrypt/accounts   (Enter 'c' to cancel):[email 

-------------------------------------------------------------------------------
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.1.1-August-1-2016.pdf. You must agree
in order to register with the ACME server at
https://acme-v01.api.letsencrypt.org/directory
-------------------------------------------------------------------------------
(A)gree/(C)ancel: a ------------------------------------------------------------------------------- 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 EFF and our work to encrypt the web, protect its users and defend digital rights. ------------------------------------------------------------------------------- (Y)es/(N)o: n Obtaining a new certificate Performing the following challenges: http-01 challenge for www.domain.com Using the webroot path /usr/local/www/nginx/ for all unmatched domains. Waiting for verification... Cleaning up challenges IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at /usr/local/etc/letsencrypt/live/www.yourdomain.com/fullchain.pem. Your cert will expire on 2017-12-28. To obtain a new or tweaked version of this certificate in the future, simply run certbot again. To non-interactively renew *all* of your certificates, run "certbot renew" - Your account credentials have been saved in your Certbot configuration directory at /usr/local/etc/letsencrypt. You should make a secure backup of this folder now. This configuration directory will also contain certificates and private keys obtained by Certbot so making regular backups of this folder is ideal. - 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

Stap 4: Update Nginx TLS-certificaten

13. De locatie van verkregen Let's Encrypt-certificaten en sleutels in FreeBSD is /usr/local/etc/letsencrypt/live/www.uwdomein.com/ systeempad. Voer de opdracht ls uit om de componenten van uw Let's Encrypt-certificaat weer te geven: het ketenbestand, het volledige ketenbestand, de privésleutel en het certificaatbestand, zoals geïllustreerd in het volgende voorbeeld.

ls /usr/local/etc/letsencrypt/live/www.yourdomain.com/

14. Om Let's Encrypt-certificaten voor uw domein op de Nginx-webserver te installeren, opent u het hoofdconfiguratiebestand van Nginx of het configuratiebestand voor de Nginx TLS-server, als het een afzonderlijk bestand is, en wijzigt u de onderstaande regels om het pad weer te geven van door Let's Encrypt uitgegeven certificaten, zoals hieronder geïllustreerd.

nano /usr/local/etc/nginx/nginx.conf

Werk de volgende regels bij zodat ze er in dit voorbeeld uitzien:

ssl_certificate "/usr/local/etc/letsencrypt/live/www.yourdomain.com/cert.pem";
	ssl_certificate_key "/usr/local/etc/letsencrypt/live/www.yourdomain.com/privkey.pem";

15. Als de regel ssl_dhparam aanwezig is in de Nginx SSL-configuratie, moet u ook een nieuwe 2048 bit genereren Diffie–Hellman-toets met het volgende commando:

openssl dhparam –out /usr/local/etc/nginx/dhparam.pem 2048 

16. Ten slotte, om de Nginx TLS-configuratie te activeren, controleert u eerst de globale configuratie van Nginx op mogelijke syntaxisfouten en start u vervolgens de Nginx-service opnieuw om de SSL-configuratie toe te passen door de volgende opdrachten uit te voeren.

nginx -t
service nginx restart

17. Bevestig of de Nginx-daemon zich bindt aan de 443-poort door de volgende opdrachten uit te voeren die alle geopende netwerksockets in het systeem in luisterstatus kunnen weergeven.

netstat -an -p tcp| grep LISTEN
sockstat -4 

18. U kunt uw domeinadres ook bezoeken via het HTTPS-protocol door een browser te openen en het volgende adres te typen om te bevestigen dat Let's Encrypt-certificaten werken zoals verwacht. Omdat u certificaten gebruikt die zijn gegenereerd door een geldige certificeringsinstantie, mag er geen fout in de browser worden weergegeven.

https://www.yourdomain.com

19. Het hulpprogramma Openssl kan u ook helpen informatie te vinden over een certificaat verkregen van Let's Encrypt CA, door de opdracht uit te voeren met de volgende opties.

openssl s_client -connect www.yourdomain.com:443

Als u Nginx wilt dwingen alle ontvangen http naar https-verzoeken voor uw domein op poort 80 door te sturen naar HTTPS, opent u het Nginx-configuratiebestand en zoekt u de serverrichtlijn voor poort 80 en voeg de onderstaande regel toe na de instructie server_name, zoals geïllustreerd in het onderstaande voorbeeld.

rewrite ^(.*) https://www.yourdomain.com$1 permanent;

20. Het instellen van automatische verlenging voor certificaten die zijn uitgegeven door de Let's Encrypt-autoriteit voordat deze verlopen, kan worden gedaan door een cron-taak te plannen die één keer per dag wordt uitgevoerd door de volgende opdracht te geven.

crontab -e

Cron-taak om certificaat te vernieuwen.

0 0 * * * certbot renew >> /var/log/letsencrypt.log

Dat is alles! Nginx kan nu beveiligde webapplicaties aan uw bezoekers aanbieden met behulp van gratis Let’s Encrypt-certificaten.