Sådan sikres Nginx med SSL, og lad os kryptere i FreeBSD


I denne vejledning diskuterer vi, hvordan du beskytter Nginx-webserver i FreeBSD med TLS/SSL-certifikater, der tilbydes af Let’s Encrypt Certificate Authority. Vi viser dig også, hvordan du automatisk forny Lets 'Encrypt-certifikater inden udløbsdatoen.

TLS, et akronym for Transport Layer Security, er en protokol, der kører under HTTP-protokol og bruger certifikater og nøgler til at indkapsle pakkerne og kryptere de data, der udveksles mellem en server og en klient, eller i dette tilfælde mellem Nginx-webserver og klientens browser for at sikre forbindelsen, så en tredjepart, der muligvis opfanger trafik, ikke kan dekryptere transmissionen.

Processen med at få et gratis Lad os kryptere certifikat i FreeBSD kan forenkles meget ved at installere certboot-klientværktøj, som er den officielle Lad os kryptere klient, der bruges til at generere og downloade certifikater.

  1. Installer FBEMP (Nginx, MariaDB og PHP) stak i FreeBSD

Trin 1: Konfigurer Nginx TLS/SSL

1. Som standard er TLS/SSL-serverkonfigurationen ikke aktiveret i FreeBSD, fordi TLS-serverblokudsagnene er kommenteret i Nginx-standardkonfigurationsfilen.

For at aktivere TLS-serveren i Nginx skal du åbne nginx.conf-konfigurationsfilen, søge efter den linje, der definerer starten af SSL-serveren, og opdatere hele blokken, så den ser ud i nedenstående eksempel.

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

Nginx HTTPS-blokuddrag:

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;
        }	
    }

Ovenstående blok udover SSL-blok indeholder også nogle udsagn til aktivering af gzip-komprimering og FastCGI Process Manager, der bruges til at overføre PHP-kode til PHP-FPM-gateway for at køre dynamiske webapplikationer.

Når du har tilføjet ovenstående kode til Nginx-hovedkonfigurationsfil, skal du ikke genstarte dæmonen eller anvende indstillingerne, før du installerer og får et Lad os kryptere certifikat til dit domæne.

Trin 2: Installer Certbot Client i FreeBSD

2. Processen med installation af Lad os kryptere certbot-klientværktøjet i FreeBSD indebærer at downloade kildekoden til py-certbot og kompilere den lokalt ved at udstede nedenstående kommandoer.

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

3. Kompilering af py-certbot-hjælpeprogrammet tager meget tid at sammenligne med installation af en almindelig binær pakke. I løbet af denne periode kræves der, at en række afhængigheder downloades i kompileret lokalt i FreeBSD.

Der vises også en række meddelelser på din skærm, der kræver, at du vælger, hvilke pakker der skal bruges på kompileringstidspunktet for hver afhængighed. På det første skærmbillede skal du vælge følgende værktøjer ved at trykke på [mellemrum] -tasten for at kompilere python27-afhængigheden, som vist i nedenstående billede.

  • IPV6
  • LIBFFI
  • NLS
  • PYMALLOC
  • TRÅDER
  • UCS4 til Unicode-understøttelse

4. Vælg derefter DOCS og THREADS for afhængighed af gettext-værktøjer og tryk på OK for at fortsætte som vist i nedenstående billede.

5. På næste skærmbillede skal du vælge TESTS deaktiveret for libffi-3.2.1 og trykke på OK for at komme videre.

6. Tryk derefter på mellemrum for at vælge DOCS for afhængighed af py27-enum34, som vil installere dokumentationen til dette værktøj, og tryk på OK for at fortsætte som vist i nedenstående skærmbillede.

7. Endelig skal du vælge at installere eksempler på eksempler for py27-openssl-afhængighed ved at trykke på [mellemrum] -tasten og trykke på OK for at afslutte kompilerings- og installationsprocessen for py-certbot-klienten.

8. Når processen med at kompilere og installere py-certbot-hjælpeprogrammet er færdig, skal du køre kommandoen nedenfor for at opgradere værktøjet til den nyeste version af pakken som illustreret i nedenstående skærmbilleder.

# pkg install py27-certbot

9. For at undgå nogle problemer kan det forekomme, mens du får et gratis Let's Encrypt-certifikat, hvor den mest almindelige fejl er "pkg_resources.DistributionNotFound", skal du sørge for, at følgende to afhængigheder også er til stede i dit system: py27-salt og py27-acme .

# pkg install py27-salt
# pkg install py27-acme

Trin 3: Installer Lad os kryptere certifikat til Nginx på FreeBSD

10. For at få et Lad os kryptere et enkeltstående certifikat til dit domæne skal du køre følgende kommando og give dig domænenavn og alle underdomæner, som du ønsker at få certifikater til, ved at antyde -d -flagget.

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

11. Mens du genererer certifikatet, bliver du bedt om at indtaste din e-mail-adresse og at være enig med Lad os kryptere servicevilkårene. Skriv a fra tastaturet for at blive enige og fortsætte, og du bliver også spurgt, om du er villig til at dele din e-mail-adresse med Lad os kryptere partnere.

Hvis du ikke vil dele din e-mail-adresse, skal du bare skrive no word i prompten og trykke på [enter] -tasten for at fortsætte. Når certifikaterne for dit domæne er opnået, modtager du nogle vigtige noter, der informerer dig om, hvor certifikaterne er gemt i dit system, og hvornår de udløber.

12. Hvis du ønsker at få et Let's Encrypt-certifikat ved hjælp af "webroot" -pluginet ved at tilføje webroot-biblioteket på Nginx-serveren til dit domæne, skal du udstede følgende kommando med --webroot og -w flag. Hvis du ikke har ændret Nginx webroot-sti, skal den som standard være placeret i/usr/local/www/nginx/systemsti.

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

Som i --strandalone -proceduren for at få et certifikat, vil --webroot -proceduren også bede dig om at angive en e-mail-adresse til certifikatfornyelse og sikkerhedsmeddelelser, for at trykke på < kode> en for at være enig med Let's Encrypt vilkår og betingelser og nej eller ja til eller ikke dele e-mail-adressen Let's Encrypt partners som illustreret i nedenstående eksempel.

Vær opmærksom på, at certbot-klienten kan registrere en falsk e-mail-adresse og ikke lade dig fortsætte med at generere et certifikat, før du angiver en rigtig e-mail-adresse.

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

Trin 4: Opdater Nginx TLS-certifikater

13. Placeringen af opnåede Lad os kryptere certifikater og nøgler i FreeBSD er /usr/local/etc/letsencrypt/live/www.yourdomain.com/ systemsti. Udsted kommandoen ls for at få vist komponenterne i dit Lad os kryptere certifikat: kædefilen, fullkædefilen, den private nøgle og certifikatfilen, som illustreret i det følgende eksempel.

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

14. For at installere Lad os kryptere certifikater til dit domæne i Nginx-webserveren, skal du åbne Nginx-hovedkonfigurationsfil eller konfigurationsfilen til Nginx TLS-server, hvis det er en separat fil, og ændre nedenstående linjer for at afspejle stien til Lad os kryptere udstedte certifikater som illustreret nedenfor.

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

Opdater følgende linjer for at se ud i denne prøve:

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. Hvis linjen ssl_dhparam er til stede i Nginx SSL-konfiguration, skal du også generere en ny 2048 bit Diffie – Hellman-nøgle med følgende kommando:

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

16. Endelig, for at aktivere Nginx TLS-konfiguration, skal du først kontrollere Nginx global konfiguration for mulige syntaksfejl og derefter genstarte Nginx-tjenesten for at anvende SSL-konfigurationen ved at udstede følgende kommandoer.

# nginx -t
# service nginx restart

17. Bekræft, om Nginx-dæmonen er bindende for 443-porten ved at udstede følgende kommandoer, der kan vise alle åbnede netværksstik i systemet i lytetilstand.

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

18. Du kan også besøge din domæneadresse via HTTPS-protokol ved at åbne en browser og skrive følgende adresse for at bekræfte, at Lad os kryptere certifikater fungerer som forventet. Da du bruger certifikater genereret af en gyldig certifikatmyndighed, bør der ikke vises nogen fejl i browseren.

https://www.yourdomain.com

19. Openssl-værktøjet kan også hjælpe dig med at finde oplysninger om et certifikat, der er hentet fra Lad os kryptere CA, ved at køre kommandoen med følgende muligheder.

# openssl s_client -connect www.yourdomain.com:443

Hvis du vil tvinge Nginx til at dirigere alle http til https-anmodninger modtaget for dit domæne på port 80 til HTTPS, skal du åbne Nginx-konfigurationsfil, finde serverdirektivet til port 80 og tilføje nedenstående linje efter servernavn-erklæring som illustreret i nedenstående eksempel .

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

20. Opsætning af automatisk fornyelse af certifikat udstedt af Let's Encrypt-autoritet, før de udløber, kan gøres ved at planlægge et cron-job til at køre en gang om dagen ved at udstede følgende kommando.

# crontab -e

Kronopgave at forny certifikat.

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

Det er alt! Nginx kan nu servere sikre webapplikationer til dine besøgende ved hjælp af Lad os kryptere gratis certifikater.