Kaip apsaugoti „Nginx“ naudojant SSL ir „Encrypt“ naudojant „FreeBSD“.


Šiame vadove aptarsime, kaip apsaugoti Nginx žiniatinklio serverį FreeBSD naudojant TLS/SSL sertifikatus, kuriuos siūlo Leisk šifruoti sertifikatą Institucija. Taip pat parodysime, kaip automatiškai atnaujinti Lets' Encrypt sertifikatus nepasibaigus jų galiojimo laikui.

TLS, Transport Layer Security santrumpa, yra protokolas, kuris veikia pagal HTTP protokolą ir naudoja sertifikatus bei raktus, kad įterptų paketus ir užšifruoti duomenis, kuriais keičiamasi tarp serverio ir kliento arba šiuo atveju tarp Nginx žiniatinklio serverio ir kliento naršyklės, kad būtų apsaugotas ryšys, kad trečioji šalis, galinti perimti srautą, negalėtų iššifruoti transmisija.

Taip pat skaitykite: FreeBSD įdiekite Let's Encrypt for Apache

Nemokamo Užšifruokime sertifikato gavimo FreeBSD procesas gali būti labai supaprastintas įdiegus certboot kliento programą, kuri yra oficialus naudojamas Let's Encrypt klientas. sertifikatams generuoti ir atsisiųsti.

Reikalavimai

  1. Įdiekite FBEMP (Nginx, MariaDB ir PHP) krūvą FreeBSD

1 veiksmas: sukonfigūruokite Nginx TLS/SSL

1. Pagal numatytuosius nustatymus TLS/SSL serverio konfigūracija FreeBSD neįjungta, nes TLS serveris blokuoja sakinius yra komentuojami Nginx numatytame konfigūracijos faile.

Norėdami suaktyvinti TLS serverį Nginx, atidarykite nginx.conf konfigūracijos failą, ieškokite eilutės, kuri apibrėžia pradžią SSL serverį ir atnaujinkite visą bloką, kad atrodytų kaip toliau pateiktame pavyzdyje.

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

Nginx HTTPS bloko ištrauka:

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

Aukščiau esančiame bloke, be SSL bloko, taip pat yra keletas teiginių, leidžiančių įjungti gzip glaudinimą ir FastCGI Process Manager, naudojamą PHP kodui perduoti į PHP-FPM< šliuzą, kad būtų galima paleisti dinamines žiniatinklio programas.

Pridėję anksčiau pateiktą kodą prie pagrindinio Nginx konfigūracijos failo, nepaleiskite demono iš naujo ir netaikyti nustatymų prieš diegdami ir negavę savo domeno Šifruokime sertifikato.

2 veiksmas: įdiekite „Certbot“ klientą „FreeBSD“.

2. Įdiegiant „Let's Encrypt“ certbot kliento priemonę „FreeBSD“ reikia atsisiųsti py-certbot šaltinio kodą ir sukompiliuoti jį vietoje, išduodant žemiau pateiktos komandos.

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

3. py-certbot paslaugų programos kompiliavimas užtrunka daug laiko, palyginti su įprasto dvejetainio paketo įdiegimu. Per šį laiką reikia atsisiųsti daugybę priklausomybių, kurios buvo sukompiliuotos vietoje FreeBSD.

Be to, jūsų ekrane bus rodoma eilė raginimų, reikalaujančių pasirinkti, kokie paketai bus naudojami kompiliavimo metu kiekvienai priklausomybei. Pirmame ekrane pasirinkite šiuos įrankius paspausdami klavišą [tarpas], kad sukurtumėte python27 priklausomybę, kaip parodyta toliau pateiktame paveikslėlyje.

  • IPV6
  • LIBFFI
  • NLS
  • PYMALLOC
  • SIJOS
  • UCS4, skirtas Unicode palaikymui

4. Tada pasirinkite DOCS ir THREADS gettext-tools priklausomybei ir paspauskite Gerai > tęsti, kaip parodyta toliau pateiktame paveikslėlyje.

5. Kitame ekrane palikite parinktį TESTAI išjungtą libffi-3.2.1 ir paspauskite Gerai, kad perkeltumėte toliau.

6. Tada paspauskite tarpą, kad pasirinktumėte DOCS, skirtą py27-enum34 priklausomybei. Taip bus įdiegta dokumentacija. įrankį ir paspauskite Gerai, kad tęstumėte, kaip parodyta toliau esančioje ekrano kopijoje.

7. Galiausiai pasirinkite įdiegti py27-openssl priklausomybės pavyzdžius paspausdami [tarpo] klavišą ir Gerai > užbaigti py-certbot kliento kompiliavimo ir diegimo procesą.

8. Baigę py-certbot paslaugų programos kompiliavimo ir įdiegimo procesą, paleiskite toliau pateiktą komandą, kad atnaujintumėte įrankį naujausia paketo versija, kaip parodyta žemiau ekrano kopijų.

pkg install py27-certbot

9. Siekiant išvengti kai kurių problemų, gali kilti nemokamą sertifikatą Užšifruokime. Dažniausiai pasitaikanti klaida yra „pkg_resources.DistributionNotFound“ , įsitikinkite, kad jūsų sistemoje taip pat yra šios dvi priklausomybės: py27-salt ir py27-acme.

pkg install py27-salt
pkg install py27-acme

3 veiksmas: „FreeBSD“ įdiekite „Let’s Encrypt“ sertifikatą, skirtą Nginx

10. Norėdami savo domenui gauti atskirą sertifikatą Užšifruokime, paleiskite šią komandą ir nurodykite domeno pavadinimą bei visus padomenius, kurių sertifikatus norite gauti, nurodant -d vėliava.

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

11. Generuojant sertifikatą jūsų bus paprašyta įvesti el. pašto adresą ir sutikti su Let's Encrypt paslaugų teikimo sąlygomis. Jei norite sutikti ir tęsti, klaviatūra įveskite a, taip pat jūsų bus paklausta, ar norite bendrinti savo el. pašto adresą su „Let’s Encrypt“ partneriais.

Jei nenorite bendrinti savo el. pašto adreso, tiesiog įveskite no žodį raginime ir paspauskite klavišą [enter], kad tęstumėte. Sėkmingai gavus jūsų domeno sertifikatus, gausite keletą svarbių pastabų, kurios informuos, kur jūsų sistemoje saugomi sertifikatai ir kada baigiasi jų galiojimo laikas.

12. Jei norite gauti „Let's Encrypt“ sertifikatą naudodami „webroot“ papildinį, pridėdami savo domeno Nginx serverio webroot katalogą , išduokite šią komandą su vėliavėlėmis --webroot ir -w. Pagal numatytuosius nustatymus, jei nepakeitėte Nginx žiniatinklio šaknies kelio, jis turėtų būti /usr/local/www/nginx/ sistemos kelyje.

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

Kaip ir --strandalone sertifikato gavimo procedūroje, --webroot procedūra taip pat paprašys jūsų pateikti el. pašto adresą sertifikato atnaujinimui ir saugos pranešimams, kad paspaustumėte a, kad sutiktumėte su Let's Encrypt taisyklėmis ir nuostatomis ir ne arba taip, kad bendrintumėte ar nesidalintumėte el. pašto adresu Let's Encrypt partneriai, kaip parodyta toliau pateiktame pavyzdyje.

Atminkite, kad „certbot“ programa gali aptikti netikrą el. pašto adresą ir neleis jums toliau generuoti sertifikato, kol nepateiksite tikro el. pašto adreso.

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

4 veiksmas: atnaujinkite Nginx TLS sertifikatus

13. Gautų Let's Encrypt sertifikatų ir raktų vieta FreeBSD yra /usr/local/etc/letsencrypt/live/www.yourdomain.com/ sistemos kelias. Išduokite komandą ls, kad būtų rodomi jūsų Let’s Encrypt sertifikato komponentai: grandinės failas, visos grandinės failas, privatus raktas ir sertifikato failas, kaip parodyta šiame pavyzdyje.

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

14. Norėdami įdiegti „Let's Encrypt“ sertifikatus jūsų domenui „Nginx“ žiniatinklio serveryje, atidarykite „Nginx“ pagrindinį konfigūracijos failą arba „Nginx TLS“ serverio konfigūracijos failą, jei tai atskiras failas, ir pakeiskite toliau pateiktas eilutes. kad atspindėtų šifruotų išduotų sertifikatų kelią, kaip parodyta toliau.

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

Atnaujinkite šias eilutes, kad atrodytų taip, kaip šiame pavyzdyje:

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. Be to, jei eilutė ssl_dhparam yra Nginx SSL konfigūracijoje, turėtumėte sugeneruoti naują 2048 bitą Klavišas Diffie–Hellman su šia komanda:

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

16. Galiausiai, norėdami suaktyvinti „Nginx TLS“ konfigūraciją, pirmiausia patikrinkite „Nginx“ visuotinę konfigūraciją, ar nėra galimų sintaksės klaidų, ir iš naujo paleiskite „Nginx“ paslaugą, kad pritaikytumėte SSL konfigūraciją, išduodami šias komandas.

nginx -t
service nginx restart

17. Patvirtinkite, ar Nginx demonas yra susietas su 443 prievadu, išduodami šias komandas, kurios gali išvardyti visus atidarytus tinklo lizdus sistemoje klausymosi būsenoje.

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

18. Taip pat galite apsilankyti savo domeno adresu naudodami HTTPS protokolą atidarę naršyklę ir įvesdami toliau pateiktą adresą, kad patvirtintumėte, jog Let's Encrypt sertifikatai veikia taip, kaip tikėtasi. Kadangi naudojate galiojančios sertifikavimo institucijos sugeneruotus sertifikatus, naršyklėje neturėtų būti rodoma jokių klaidų.

https://www.yourdomain.com

19. Openssl paslaugų programa taip pat gali padėti rasti informacijos apie sertifikatą, gautą iš Let's Encrypt CA, paleidus komandą su šiomis parinktimis.

openssl s_client -connect www.yourdomain.com:443

Jei norite priversti Nginx nukreipti visas http į https užklausas, gautas jūsų domenui per prievadą 80 į HTTPS, atidarykite Nginx konfigūracijos failą, suraskite 80 prievado serverio direktyvą ir pridėkite žemiau esančią eilutę po sakinio serverio_pavadinimas, kaip parodyta toliau pateiktame pavyzdyje.

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

20. Nustatyti automatinį „Let’s Encrypt“ institucijos išduoto sertifikato atnaujinimą prieš pasibaigiant jų galiojimo laikui, suplanavus cron užduotį, kad ji būtų vykdoma kartą per dieną, išduodant šią komandą.

crontab -e

Cron užduotis atnaujinti sertifikatą.

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

Tai viskas! „Nginx“ dabar gali teikti apsaugotas žiniatinklio programas jūsų lankytojams, naudodamas „Let's Encrypt“ nemokamus sertifikatus.