Kako zaštititi Nginx sa SSL-om i Let’s Encrypt u FreeBSD-u


U ovom vodiču raspravljat ćemo o tome kako osigurati Nginx web poslužitelj u FreeBSD s TLS/SSL certifikatima koje nudi Let's Encrypt Certificate Autoritet. Također ćemo vam pokazati kako automatski obnoviti Lets’ Encrypt certifikate prije datuma isteka.

TLS, akronim za Transport Layer Security, je protokol koji radi pod HTTP protokolom i koristi certifikate i ključeve kako bi enkapsulirao pakete i šifrirati podatke razmijenjene između poslužitelja i klijenta, ili u ovom slučaju između web poslužitelja Nginx i preglednika klijenta, kako bi se osigurala veza, tako da treća strana, koja bi mogla presresti promet, ne može dekriptirati prijenos.

Pročitajte također: Instalirajte Let’s Encrypt for Apache na FreeBSD

Proces dobivanja besplatnog Let's Encrypt certifikata u FreeBSD može se uvelike pojednostaviti instaliranjem uslužnog programa certboot klijenta, koji je službeni Let's Encrypt klijent koji se koristi za generiranje i preuzimanje certifikata.

Zahtjevi

  1. Instalirajte FBEMP (Nginx, MariaDB i PHP) skup u FreeBSD

Korak 1: Konfigurirajte Nginx TLS/SSL

1. Prema zadanim postavkama, TLS/SSL konfiguracija poslužitelja nije omogućena u FreeBSD jer TLS blok izjave poslužitelja komentiraju se u Nginx zadanoj konfiguracijskoj datoteci.

Kako biste aktivirali TLS poslužitelj u Nginxu, otvorite nginx.conf konfiguracijsku datoteku, potražite liniju koja definira početak SSL poslužitelj i ažurirajte cijeli blok da izgleda kao u donjem primjeru.

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

Nginx HTTPS blok izvadak:

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

Gornji blok, uz SSL blok, također sadrži neke izjave za omogućavanje gzip kompresije i FastCGI Process Manager, koji se koristi za prosljeđivanje PHP koda PHP-FPM< pristupnik za pokretanje dinamičkih web aplikacija.

Nakon što ste dodali gornji kod u glavnu konfiguracijsku datoteku Nginx, nemojte ponovno pokretati demon ili primjenjivati postavke prije instaliranja i dobivanja certifikata Let’s Encrypt za svoju domenu.

Korak 2: Instalirajte Certbot Client u FreeBSD

2. Proces instaliranja certbot klijentskog uslužnog programa Let's Encrypt u FreeBSD uključuje preuzimanje izvornog koda za py-certbot i njegovo lokalno kompajliranje, izdavanjem naredbe u nastavku.

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

3. Kompajliranje uslužnog programa py-certbot oduzima puno vremena u usporedbi s instaliranjem običnog binarnog paketa. Tijekom tog vremena potrebno je preuzeti niz ovisnosti u lokalno kompiliranom obliku u FreeBSD.

Također, niz upita će se pojaviti na vašem ekranu, zahtijevajući od vas da odaberete koji će se paketi koristiti u vrijeme kompajliranja za svaku ovisnost. Na prvom zaslonu odaberite sljedeće alate pritiskom na tipku [space] za kompajliranje ovisnosti python27, kao što je ilustrirano na donjoj slici.

  • IPV6
  • LIBFFI
  • NLS
  • PYMALLOC
  • NITI
  • UCS4 za Unicode podršku

4. Zatim odaberite DOCS i THREADS za ovisnost o gettext-tools i pritisnite OK za nastavak kako je prikazano na slici ispod.

5. Na sljedećem ekranu ostavite opciju TESTOVI onemogućenu za libffi-3.2.1 i pritisnite OK za pomicanje unaprijediti.

6. Zatim pritisnite razmaknicu za odabir DOCS za ovisnost py27-enum34, koja će instalirati dokumentaciju za ovo i pritisnite OK za nastavak, kao što je prikazano na slici ispod.

7. Konačno, odaberite instalaciju primjera za ovisnost py27-openssl pritiskom na tipku [space] i pritisnite OK za dovršetak procesa kompilacije i instalacije za py-certbot klijent.

8. Nakon završetka postupka kompajliranja i instaliranja uslužnog programa py-certbot, pokrenite naredbu ispod kako biste nadogradili alat na najnoviju verziju paketa kao što je ilustrirano u ispod snimaka zaslona.

pkg install py27-certbot

9. Kako biste izbjegli neke probleme koji se mogu pojaviti tijekom dobivanja besplatnog Let's Encrypt certifikata, najčešća pogreška je “pkg_resources.DistributionNotFound” , provjerite jesu li sljedeće dvije ovisnosti također prisutne u vašem sustavu: py27-salt i py27-acme.

pkg install py27-salt
pkg install py27-acme

Korak 3: Instalirajte Let’s Encrypt Certificate za Nginx na FreeBSD

10. Kako biste dobili Let's Encrypt samostalni certifikat za svoju domenu, pokrenite sljedeću naredbu i dajte naziv domene i sve poddomene za koje želite dobiti certifikate tako da implicirate -d zastava.

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

11. Tijekom generiranja certifikata od vas će se tražiti da unesete svoju adresu e-pošte i da se slažete s Let’s Encrypt uvjetima usluge. Upišite a s tipkovnice da biste se složili i nastavili, a također ćete biti upitani želite li podijeliti svoju adresu e-pošte s partnerima Let’s Encrypt.

U slučaju da ne želite dijeliti svoju adresu e-pošte, samo upišite no riječ u upit i pritisnite tipku [enter] za nastavak. Nakon što su certifikati za vašu domenu uspješno dobiveni, dobit ćete neke važne napomene koje će vas informirati gdje su certifikati pohranjeni u vašem sustavu i kada ističu.

12. U slučaju da želite dobiti Let's Encrypt certifikat pomoću “webroot” dodatka dodavanjem webroot direktorija Nginx poslužitelja za vašu domenu izdajte sljedeću naredbu s oznakama --webroot i -w. Prema zadanim postavkama, ako niste promijenili Nginx webroot stazu, ona bi se trebala nalaziti na /usr/local/www/nginx/ sistemskoj stazi.

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

Kao u postupku --strandalone za dobivanje certifikata, postupak --webroot također će od vas tražiti da navedete adresu e-pošte za obnavljanje certifikata i sigurnosne obavijesti, da pritisnete a da se slažete s uvjetima i odredbama Let's Encrypt i ne ili da da ili ne dijelite adresu e-pošte s partnerima Let's Encrypta kao što je ilustrirano u donjem primjeru.

Imajte na umu da certbot klijent može otkriti lažnu adresu e-pošte i neće vam dopustiti da nastavite s generiranjem certifikata dok ne unesete pravu adresu e-pošte.

Cerbot uzorak:
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

Korak 4: Ažurirajte Nginx TLS certifikate

13. Lokacija dobivenih Let’s Encrypt certifikata i ključeva u FreeBSD-u je /usr/local/etc/letsencrypt/live/www.yourdomain.com/ sistemska staza. Izdajte naredbu ls kako biste prikazali komponente vašeg Let’s Encrypt certifikata: datoteku lanca, datoteku punog lanca, privatni ključ i datoteku certifikata, kao što je ilustrirano u sljedećem primjeru.

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

14. Kako biste instalirali Let's Encrypt certifikate za svoju domenu na Nginx web poslužitelju, otvorite Nginx glavnu konfiguracijsku datoteku ili konfiguracijsku datoteku za Nginx TLS poslužitelj, u slučaju da se radi o zasebnoj datoteci, i izmijenite donje retke kako bi se prikazao put let's Encrypt izdanih certifikata kao što je prikazano u nastavku.

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

Ažurirajte sljedeće retke da izgledaju kao u ovom primjeru:

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. Također, ako je linija ssl_dhparam prisutna u Nginx SSL konfiguraciji, trebali biste generirati novi 2048 bit Tipka Diffie–Hellman sa sljedećom naredbom:

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

16. Konačno, kako biste aktivirali Nginx TLS konfiguraciju, prvo provjerite Nginx globalnu konfiguraciju radi mogućih grešaka u sintaksi, a zatim ponovno pokrenite Nginx uslugu za primjenu SSL konfiguracije izdavanjem sljedećih naredbi.

nginx -t
service nginx restart

17. Potvrdite je li Nginx demon vezan za port 443 izdavanjem sljedećih naredbi koje mogu ispisati sve otvorene mrežne utičnice u sustavu u stanju slušanja.

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

18. Također možete posjetiti svoju adresu domene putem HTTPS protokola tako da otvorite preglednik i upišete sljedeću adresu kako biste potvrdili da Let’s Encrypt certifikati rade kako se očekuje. Budući da koristite certifikate koje je generirao važeći Izdavač certifikata, u pregledniku se ne bi trebala prikazati pogreška.

https://www.yourdomain.com

19. Uslužni program Openssl također vam može pomoći pronaći informacije o certifikatu dobivenom od Let’s Encrypt CA, pokretanjem naredbe sa sljedećim opcijama.

openssl s_client -connect www.yourdomain.com:443

U slučaju da želite prisiliti Nginx da usmjeri sve http na https zahtjeve primljene za vašu domenu na portu 80 na HTTPS, otvorite Nginx konfiguracijsku datoteku, pronađite direktivu poslužitelja za port 80 i dodajte donji redak nakon izjave server_name kao što je prikazano u donjem primjeru.

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

20. Postavljanje automatske obnove za certifikate koje je izdalo ovlaštenje Let’s Encrypt prije nego što isteknu može se izvršiti zakazivanjem pokretanja cron posla jednom dnevno izdavanjem sljedeće naredbe.

crontab -e

Cron zadatak za obnovu certifikata.

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

To je sve! Nginx sada može posluživati zaštićene web aplikacije vašim posjetiteljima pomoću besplatnih certifikata Let’s Encrypt.