Kuidas kaitsta Nginxit SSL-iga ja krüpteerime FreeBSD-s


Selles juhendis käsitleme, kuidas kaitsta Nginxi veebiserverit FreeBSD-s LetS Encrypt Certificate Authority pakutavate TLS/SSL-sertifikaatidega. Samuti näitame teile, kuidas saate Lets ’Encrypt sertifikaate enne kehtivusaja lõppu automaatselt uuendada.

Transpordikihi turvalisuse lühend TLS on protokoll, mis töötab HTTP-protokolli all ning kasutab sertifikaate ja võtmeid pakettide kapseldamiseks ning serveri ja kliendi või antud juhul Nginxi veebiserveri ja kliendi vahel vahetatud andmete krüptimiseks. brauseris ühenduse loomiseks, et liikluse pealtkuulamise kolmas osapool ei saaks edastust dekrüpteerida.

FreeBSD-s tasuta Let’s Encrypt sertifikaadi hankimise protsessi saab oluliselt lihtsustada, kui installite certboot-kliendi utiliidi, mis on ametlik Let’s Encrypt-i klient, mida kasutatakse sertifikaatide genereerimiseks ja allalaadimiseks.

  1. Installige FreeBSD-sse FBEMP (Nginx, MariaDB ja PHP) virn

1. samm: konfigureerige Nginx TLS/SSL

1. Vaikimisi pole TLS/SSL-serveri konfiguratsioon FreeBSD-s lubatud, kuna TLS-i serveri ploki väljavõtteid kommenteeritakse Nginxi vaikekonfiguratsiooni failis.

TLS-serveri aktiveerimiseks Nginxis avage konfiguratsioonifail nginx.conf, otsige rida, mis määratleb SSL-serveri alguse, ja värskendage kogu plokki nii, et see näeks välja allpool toodud näites.

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

Nginxi HTTPS-i ploki väljavõte:

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

Ülaltoodud plokk sisaldab lisaks SSL-plokile ka mõningaid avaldusi gzip-tihenduse lubamiseks ja FastCGI protsessihaldurit, mida kasutatakse dünaamiliste veebirakenduste käitamiseks PHP-koodi edastamiseks PHP-FPM-i lüüsile.

Pärast ülaltoodud koodi lisamist Nginxi põhikonfiguratsioonifaili ärge taaskäivitage deemonit ega rakendage sätteid enne, kui installite ja hankige oma domeeni jaoks Let’s Encrypt sertifikaat.

2. samm: installige Certboti klient FreeBSD-sse

2. Let’s Encrypt certboti kliendi utiliidi FreeBSD-sse installimise protsess hõlmab py-certboti lähtekoodi allalaadimist ja selle lokaalset kompileerimist, väljastades alltoodud käsud.

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

3. Py-certboti utiliidi kompileerimine võtab tavalise binaarpaketi installimisega võrreldes palju aega. Selle aja jooksul tuleb FreeBSD-s kohapeal alla laadida rida sõltuvusi.

Samuti ilmub teie ekraanile rida viipasid, mis nõuavad teil valida, milliseid pakette kompileerimisel iga sõltuvuse jaoks kasutatakse. Esimesel ekraanil valige python27 sõltuvuse kompileerimiseks järgmised tööriistad, vajutades klahvi [tühik], nagu on näidatud alloleval pildil.

  • IPV6
  • LIBFFI
  • NLS
  • PYMALLOC
  • NIIDID
  • UCS4 Unicode'i toe jaoks

4. Seejärel valige gettext-tools sõltuvuse jaoks DOCS ja THREADS ning vajutage jätkamiseks OK, nagu on näidatud alloleval pildil.

5. Jätke järgmisel ekraanil valik TESTS keelatud libffi-3.2.1 jaoks ja vajutage edasiliikumiseks OK.

6. Seejärel vajutage tühiku valimiseks DOCS sõltuvuse py27-enum34 jaoks, mis installib selle tööriista dokumentatsiooni, ja vajutage jätkamiseks nuppu OK, nagu on näidatud alloleval ekraanipildil.

7. Lõpuks valige installida py27-openssl sõltuvuse näidisnäidised, vajutades klahvi [tühik] ja vajutage OK, et lõpetada py-certboti kliendi kompileerimise ja installimise protsess.

8. Pärast py-certboti utiliidi kompileerimise ja installimise lõppu käivitage allolev käsk, et tööriista uuendada paketi uusimas versioonis, nagu on näidatud allpool olevatel ekraanipiltidel.

# pkg install py27-certbot

9. Et vältida mõningaid probleeme, mis võivad ilmneda tasuta Let's Encrypt -sertifikaadi hankimisel, kõige levinum viga on\"pkg_resources.DistributionNotFound", veenduge, et teie süsteemis oleks ka järgmised kaks sõltuvust: py27-salt ja py27- acme.

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

3. samm: installige Nginxi krüpteerimise sertifikaat FreeBSD-sse

10. Et saaksime oma domeeni jaoks krüptida eraldiseisva sertifikaadi, käivitage järgmine käsk ja andke teile domeeninimi ja kõik alamdomeenid, mille jaoks soovite sertifikaate hankida, märkides lipu -d .

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

11. Sertifikaadi loomisel palutakse teil sisestada oma e-posti aadress ja nõustuda Let’s Encrypt teenusetingimustega. Nõustumiseks ja jätkamiseks tippige klaviatuurilt a ja teilt küsitakse ka, kas soovite jagada oma e-posti aadressi Let’s Encrypt partneritega.

Kui te ei soovi oma e-posti aadressi jagada, tippige viipasse lihtsalt sõna no ja vajutage jätkamiseks klahvi [enter]. Pärast seda, kui teie domeeni sertifikaadid on edukalt hangitud, saate mõned olulised märkused, mis teavitavad teid sellest, kus sertifikaate teie süsteemis hoitakse ja millal need aeguvad.

12. Kui soovite saada krüptimise sertifikaadi „webroot” pistikprogrammi abil, lisades oma domeeni jaoks Nginxi serveri veebijuure kataloogi, väljastage järgmine käsk koos --webroot ja -w lipud. Kui te pole Nginxi veebijuure teed muutnud, peaks see vaikimisi asuma kataloogis/usr/local/www/nginx/system path.

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

Sarnaselt sertifikaadi hankimise protseduuriga --strandalone palub ka protseduur --webroot teil sisestada e-posti aadress sertifikaadi uuendamiseks ja turvateadete saamiseks, et vajutada < kood> a , et nõustuda Let's Encrypt nõuete ja tingimustega ning no või yes e-posti aadressi Let's Encrypt partnerite jagamiseks või mitte, nagu on näidatud allpool toodud näidises.

Pange tähele, et certboti klient suudab tuvastada võltsitud e-posti aadressi ega lase teil sertifikaadi loomist jätkata enne, kui sisestate reaalse e-posti aadressi.

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. samm: värskendage Nginx TLS-i sertifikaate

13. Saadud Let’s Encrypt sertifikaatide ja võtmete asukoht FreeBSD-s on /usr/local/etc/letsencrypt/live/www.yourdomain.com/ süsteemitee. Väljastage käsk ls, et kuvada teie Let’s Encrypt sertifikaadi komponendid: kettfail, fullchain-fail, privaatne võti ja sertifikaadifail, nagu on illustreeritud järgmises näites.

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

14. Let's krüptida oma domeeni sertifikaadid Nginxi veebiserverisse, avage Nginxi põhikonfiguratsioonifail või Nginx TLS-serveri konfiguratsioonifail, juhul kui see on eraldi fail, ja muutke allolevaid ridu, et need kajastaksid krüptimise teed välja antud sertifikaadid, nagu allpool illustreeritud.

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

Selles näites välja nägemiseks värskendage järgmisi ridu:

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. Kui rida ssl_dhparam on olemas ka Nginx SSL-i konfiguratsioonis, peaksite looma uue 2048-bitise Diffie – Hellman-võtme järgmise käsuga:

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

16. Lõpuks kontrollige Nginx TLS-i konfiguratsiooni aktiveerimiseks kõigepealt Nginxi globaalset konfiguratsiooni võimalike süntaksivigade osas ja seejärel taaskäivitage Nginx-teenus SSL-konfiguratsiooni rakendamiseks, väljastades järgmised käsud.

# nginx -t
# service nginx restart

17. Veenduge, et Nginxi deemon seob 443 porti, väljastades järgmised käsud, mis võivad loetleda kõik süsteemi avatud võrgupesad kuulamisolekus.

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

18. Võite oma domeeni aadressi külastada ka HTTPS-protokolli kaudu, avades brauseri ja sisestades järgmise aadressi, et veenduda, et Let’s Encrypt sertifikaadid töötavad ootuspäraselt. Kuna kasutate kehtiva sertifikaadiasutuse loodud sertifikaate, ei tohiks brauseris kuvada ühtegi viga.

https://www.yourdomain.com

19. Utiliit Openssl aitab teil leida teavet Let’s Encrypt CA-st saadud sertifikaadi kohta, käivitades käsu järgmiste suvanditega.

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

Kui soovite sundida Nginxit suunama kõik teie domeeni jaoks pordil 80 saabunud http-i https-päringud HTTPS-i, avage Nginxi konfiguratsioonifail, leidke pordi 80 serveridirektiiv ja lisage alljärgnev lause server_name järele, nagu on näidatud allpool toodud näites .

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

20. Automaatse uuendamise seadistamiseks Let’s Encrypt asutuse välja antud sertifikaadile enne nende kehtivuse lõppemist saab planeerida croni töö käivitamise üks kord päevas, väljastades järgmise käsu.

# crontab -e

Croni ülesanne sertifikaadi uuendamiseks.

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

See on kõik! Nüüd saab Nginx teie külastajatele turvatud veebirakendusi kasutada, kasutades Let’s Encrypt tasuta sertifikaate.