Kā nodrošināt Nginx ar SSL un šifrēsim FreeBSD


Šajā ceļvedī mēs apspriedīsim, kā nodrošināt Nginx tīmekļa serveri FreeBSD ar TLS/SSL sertifikātiem, ko piedāvā Let’s Encrypt Certificate Authority. Mēs arī parādīsim, kā automātiski atjaunot Lets ’Encrypt sertifikātus pirms derīguma termiņa beigām.

TLS, saīsinājums Transport Layer Security, ir protokols, kas darbojas saskaņā ar HTTP protokolu un izmanto sertifikātus un atslēgas, lai iekapsulētu paketes un šifrētu datus, ar kuriem apmainās starp serveri un klientu, vai šajā gadījumā starp Nginx tīmekļa serveri un klienta pārlūku, lai nodrošinātu savienojumu, lai trešā puse, kas varētu pārtvert trafiku, nevarētu atšifrēt pārraidi.

Bezmaksas Let’s Encrypt sertifikāta iegūšanas procesu FreeBSD var ievērojami vienkāršot, instalējot certboot klienta utilītu, kas ir oficiālais Let’s Encrypt klients, ko izmanto sertifikātu ģenerēšanai un lejupielādei.

  1. Instalējiet FBEMP (Nginx, MariaDB un PHP) kaudzīti FreeBSD

1. darbība: konfigurējiet Nginx TLS/SSL

1. Pēc noklusējuma TLS/SSL servera konfigurācija FreeBSD nav iespējota, jo TLS servera bloka paziņojumi tiek komentēti Nginx noklusējuma konfigurācijas failā.

Lai aktivizētu TLS serveri Nginx, atveriet konfigurācijas failu nginx.conf, meklējiet līniju, kas nosaka SSL servera sākumu, un atjauniniet visu bloku tā, lai tas izskatītos zemāk esošajā paraugā.

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

Nginx HTTPS bloka fragments:

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

Iepriekš minētajā blokā papildus SSL blokam ir arī daži paziņojumi gzip saspiešanas un FastCGI procesu pārvaldnieka iespējošanai, ko izmanto PHP koda pārsūtīšanai uz PHP-FPM vārteju, lai palaistu dinamiskas tīmekļa lietojumprogrammas.

Pēc iepriekš minētā koda pievienošanas Nginx galvenajam konfigurācijas failam, pirms domēna Let’s Encrypt sertifikāta instalēšanas un iegūšanas, restartējiet dēmonu un nelietojiet iestatījumus.

2. darbība: instalējiet Certbot klientu FreeBSD

2. Let’s Encrypt certbot klienta utilītas instalēšanas process FreeBSD ietver py-certbot avota koda lejupielādi un lokālu kompilēšanu, izsniedzot tālāk norādītās komandas.

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

3. Py-certbot utilītas sastādīšana prasa daudz laika, salīdzinot ar parastas binārā pakotnes instalēšanu. Šajā laikā ir jālejupielādē virkne atkarību, kas jāapkopo lokāli FreeBSD.

Ekrānā parādīsies virkne uzvedņu, kas prasīs, lai jūs izvēlētos, kādas paketes katrai atkarībai tiks izmantotas kompilēšanas laikā. Pirmajā ekrānā atlasiet šādus rīkus, nospiežot taustiņu [atstarpe], lai izveidotu atkarību no python27, kā parādīts zemāk esošajā attēlā.

  • IPV6
  • LIBFFI
  • NLS
  • PYMALLOC
  • TINI
  • UCS4 Unicode atbalstam

4. Pēc tam atlasiet DOCS un THREADS atkarībā no gettext-tools atkarības un nospiediet OK, lai turpinātu, kā parādīts zemāk esošajā attēlā.

5. Nākamajā ekrānā atstājiet opciju TESTI atspējotai libffi-3.2.1 un nospiediet OK, lai pārietu tālāk.

6. Pēc tam nospiediet atstarpes taustiņu, lai izvēlētos DOCS Py27-enum34 atkarībai, kas instalēs šī rīka dokumentāciju, un nospiediet Labi, lai turpinātu, kā parādīts zemāk redzamajā ekrānuzņēmumā.

7. Visbeidzot, izvēlieties instalēt paraugu piemērus py27-openssl atkarībai, nospiežot taustiņu [atstarpe] un nospiediet OK, lai pabeigtu py-certbot klienta kompilēšanas un instalēšanas procesu.

8. Pēc py-certbot utilītas apkopošanas un instalēšanas pabeigšanas palaidiet zemāk esošo komandu, lai jauninātu rīku jaunākajā pakotnes versijā, kā parādīts zemāk esošajos ekrānuzņēmumos.

# pkg install py27-certbot

9. Lai izvairītos no dažām problēmām, kas var rasties, iegūstot bezmaksas Let's Encrypt sertifikātu, visbiežāk sastopamā kļūda ir “pkg_resources.DistributionNotFound”, pārliecinieties, ka jūsu sistēmā ir arī šādas divas atkarības: py27-salt un py27-acme .

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

3. darbība: instalējiet Let’s Encrypt Certificate for Nginx vietnē FreeBSD

10. Lai iegūtu sava domēna Let’s Encrypt standalone sertifikātu, palaidiet šo komandu un norādiet domēna vārdu un visus apakšdomēnus, kuru sertifikātus vēlaties iegūt, norādot karodziņu -d .

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

11. Ģenerējot sertifikātu, jums tiks lūgts ievadīt savu e-pasta adresi un piekrist Let’s Encrypt pakalpojumu sniegšanas noteikumiem. Ievadiet a no tastatūras, lai piekristu un turpinātu, un jums arī tiks jautāts, vai vēlaties koplietot savu e-pasta adresi ar Let’s Encrypt partneriem.

Ja nevēlaties kopīgot savu e-pasta adresi, vienkārši uzvednē ierakstiet vārdu no un nospiediet taustiņu [Enter], lai turpinātu. Pēc tam, kad jūsu domēna sertifikāti būs veiksmīgi iegūti, jūs saņemsiet dažas svarīgas piezīmes, kas informēs jūs, kur sertifikāti tiek glabāti jūsu sistēmā un kad beidzas to derīguma termiņš.

12. Ja vēlaties iegūt sertifikātu Let's Encrypt, izmantojot spraudni “webroot”, savam domēnam pievienojot Nginx servera tīmekļa sakņu direktoriju, izsniedziet šādu komandu ar --webroot un -w karodziņi. Pēc noklusējuma, ja neesat mainījis Nginx tīmekļa sakņu ceļu, tam jāatrodas/usr/local/www/nginx/system path.

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

Tāpat kā procedūrā --strandalone sertifikāta iegūšanai, procedūra --webroot arī prasīs norādīt e-pasta adresi sertifikāta atjaunošanai un drošības paziņojumiem, lai nospiestu < kods> a , lai piekristu šifrēšanas noteikumiem un nosacījumiem un vai e-pasta adreses Encrypt partneriem koplietošanai vai nedalīšanai, kā parādīts zemāk esošajā paraugā.

Ņemiet vērā, ka certbot klients var atklāt viltotu e-pasta adresi un neļaus jums turpināt sertifikāta ģenerēšanu, kamēr nenorādīsit īstu e-pasta adresi.

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. darbība: atjauniniet Nginx TLS sertifikātus

13. Iegūto Let’s Encrypt sertifikātu un atslēgu atrašanās vieta FreeBSD ir /usr/local/etc/letsencrypt/live/www.yourdomain.com/ sistēmas ceļš. Izdodiet komandu ls, lai parādītu jūsu Let’s Encrypt sertifikāta komponentus: ķēdes failu, fullchain failu, privāto atslēgu un sertifikāta failu, kā parādīts šajā piemērā.

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

14. Lai instalētu sava domēna šifrēšanas sertifikātus Nginx tīmekļa serverī, atveriet Nginx galveno konfigurācijas failu vai Nginx TLS servera konfigurācijas failu, ja tas ir atsevišķs fails, un modificējiet zemāk redzamās rindas, lai atspoguļotu šifrēšanas ceļu izsniedz sertifikātus, kā parādīts zemāk.

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

Lai izskatītos šajā paraugā, atjauniniet šīs rindas:

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. Turklāt, ja Nginx SSL konfigurācijā ir rinda ssl_dhparam, jums vajadzētu ģenerēt jaunu 2048 bitu Diffie – Hellman atslēgu ar šādu komandu:

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

16. Visbeidzot, lai aktivizētu Nginx TLS konfigurāciju, vispirms pārbaudiet, vai Nginx globālajā konfigurācijā nav iespējamās sintakses kļūdas, un pēc tam restartējiet pakalpojumu Nginx, lai piemērotu SSL konfigurāciju, izsniedzot šādas komandas.

# nginx -t
# service nginx restart

17. Pārliecinieties, vai Nginx dēmons ir saistošs 443 pieslēgvietai, izsniedzot šādas komandas, kuras var uzskaitīt visas sistēmas atvērtās tīkla ligzdas klausīšanās stāvoklī.

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

18. Varat arī apmeklēt sava domēna adresi, izmantojot HTTPS protokolu, atverot pārlūkprogrammu un ierakstot šo adresi, lai pārliecinātos, ka Let’s Encrypt sertifikāti darbojas kā paredzēts. Tā kā jūs izmantojat derīgas sertifikātu iestādes izveidotus sertifikātus, pārlūkprogrammā nedrīkst parādīt kļūdu.

https://www.yourdomain.com

19. Opensl utilīta var arī palīdzēt atrast informāciju par sertifikātu, kas iegūts no Let’s Encrypt CA, izpildot komandu ar šādām opcijām.

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

Gadījumā, ja vēlaties piespiest Nginx visus 80 domēnā jūsu domēnam saņemtos http uz https pieprasījumus novirzīt uz HTTPS, atveriet Nginx konfigurācijas failu, atrodiet 80. porta servera direktīvu un pievienojiet zem rindas aiz paziņojuma server_name, kā parādīts zemāk esošajā piemērā .

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

20. Automātiskās atjaunošanas iestatīšanu sertifikātam, ko izdevusi Let’s Encrypt iestāde, pirms to derīguma termiņa beigām, var izdarīt, ieplānojot cron darba izpildi vienu reizi dienā, izsniedzot šādu komandu.

# crontab -e

Cron uzdevums atjaunot sertifikātu.

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

Tas ir viss! Nginx tagad var apmeklētājiem nodrošināt drošas tīmekļa lietojumprogrammas, izmantojot Let’s Encrypt bezmaksas sertifikātus.