Jinsi ya Kulinda Nginx na SSL na Wacha Tufiche katika FreeBSD


Katika mwongozo huu tutajadili jinsi ya kupata seva ya wavuti ya Nginx katika FreeBSD na vyeti vya TLS/SSL vinavyotolewa na Mamlaka ya Cheti cha Let's Encrypt. Pia tutakuonyesha jinsi ya kusasisha kiotomatiki vyeti vya Lets’ Encrypt kabla ya tarehe ya mwisho.

TLS, kifupi cha Usalama wa Tabaka la Usafiri, ni itifaki inayoendeshwa chini ya itifaki ya HTTP na hutumia vyeti na funguo ili kuambatanisha pakiti na kusimba kwa njia fiche data inayobadilishwa kati ya seva na mteja, au katika hali hii kati ya seva ya wavuti ya Nginx na mteja. kivinjari, ili kulinda muunganisho, ili mtu wa tatu, ambaye anaweza kuzuia trafiki, hawezi kusimbua uwasilishaji.

Mchakato wa kupata cheti cha bure cha Let's Encrypt katika FreeBSD kinaweza kurahisishwa kwa kiasi kikubwa kwa kusakinisha huduma ya mteja wa certboot, ambayo ni mteja rasmi wa Let's Encrypt kutumika kuzalisha na kupakua vyeti.

  1. Sakinisha rafu za FBEMP (Nginx, MariaDB na PHP) katika FreeBSD

Hatua ya 1: Sanidi Nginx TLS/SSL

1. Kwa chaguomsingi, usanidi wa seva ya TLS/SSL haujawezeshwa katika FreeBSD kwa sababu taarifa za kuzuia seva ya TLS hutolewa maoni katika faili ya usanidi chaguo-msingi ya Nginx.

Ili kuamilisha seva ya TLS katika Nginx, fungua faili ya usanidi ya nginx.conf, tafuta laini inayofafanua kuanza kwa seva ya SSL na usasishe kizuizi kizima ili kifanane na sampuli iliyo hapa chini.

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

Nukuu ya kuzuia HTTPS ya Nginx:

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

Kizuizi kilicho hapo juu, pamoja na kizuizi cha SSL, pia kina baadhi ya taarifa za kuwezesha mgandamizo wa gzip na Kidhibiti cha Mchakato cha FastCGI, kinachotumika kupitisha msimbo wa PHP hadi lango la PHP-FPM ili kuendesha programu mahiri za wavuti.

Baada ya kuongeza nambari iliyo hapo juu kwenye faili kuu ya usanidi ya Nginx, usiwashe tena daemoni au utumie mipangilio kabla ya kusakinisha na kupata cheti cha Hebu Tusimbe kwa Kikoa chako.

Hatua ya 2: Sakinisha Mteja wa Certbot katika FreeBSD

2. Mchakato wa kusakinisha huduma ya mteja ya Let's Encrypt certbot katika FreeBSD inahusisha kupakua msimbo wa chanzo wa py-certbot na uukusanye ndani, kwa kutoa amri zilizo hapa chini.

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

3. Kukusanya matumizi ya py-certbot huchukua muda mwingi kulinganisha na kusakinisha kifurushi cha kawaida cha binary. Wakati huu, mfululizo wa tegemezi unahitajika kupakuliwa katika kukusanywa ndani ya FreeBSD.

Pia, mfululizo wa vidokezo utaonekana kwenye skrini yako, na kukutaka uchague ni vifurushi vipi vitatumika wakati wa kukusanya kwa kila utegemezi. Katika skrini ya kwanza, chagua zana zifuatazo, kwa kubofya kitufe cha [nafasi], kwa ajili ya kuandaa utegemezi wa python27, kama inavyoonyeshwa kwenye picha hapa chini.

  • IPV6
  • LIBFFI
  • NLS
  • PYMALLOC
  • NYUZI
  • UCS4 kwa usaidizi wa Unicode

4. Kisha, chagua DOCS na THREADS kwa utegemezi wa gettext-tools na ubonyeze Sawa ili kuendelea kama inavyoonyeshwa kwenye picha iliyo hapa chini.

5. Kwenye skrini inayofuata acha chaguo la TEST limezimwa kwa libffi-3.2.1 na ubonyeze Sawa ili kusonga zaidi.

6. Kisha, gusa nafasi ili kuchagua DOCS kwa utegemezi wa py27-enum34, ambayo itasakinisha hati za zana hii, na ubonyeze Sawa ili kuendelea, kama inavyoonyeshwa kwenye picha ya skrini iliyo hapa chini.

7. Hatimaye, chagua kusakinisha sampuli za mifano ya utegemezi wa py27-openssl kwa kubofya kitufe cha [nafasi] na ubofye Sawa ili kukamilisha mchakato wa utungaji na usakinishaji kwa mteja wa py-certbot.

8. Baada ya mchakato wa kukusanya na kusakinisha kukamilika kwa matumizi ya py-certbot, endesha amri iliyo hapa chini ili kuboresha zana katika toleo jipya zaidi la kifurushi kama inavyoonyeshwa kwenye picha za skrini zilizo hapa chini.

# pkg install py27-certbot

9. Ili kuepuka baadhi ya masuala huenda yakatokea wakati wa kupata cheti cha bure cha Hebu Tusimba Fiche, hitilafu inayojulikana zaidi ikiwa \pkg_resources.DistributionNotFound, hakikisha kuwa vitegemezi viwili vifuatavyo pia vipo kwenye mfumo wako: py27-chumvi na py27- acme.

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

Hatua ya 3: Sakinisha Hebu Tusimbe Cheti cha Nginx kwenye FreeBSD

10. Ili kupata cheti cha kujitegemea cha Hebu Tusimbe kwa Kikoa chako, endesha amri ifuatayo na ukupe jina la kikoa na vikoa vidogo vyote unavyotaka kupata vyeti kwa kuashiria alama ya -d.

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

11. Unapotengeneza cheti utaombwa kukuandikia barua pepe na kukubaliana na Sheria na Masharti ya Huduma ya Let's Encrypt. Andika a kutoka kwenye kibodi ili ukubali na kuendelea na pia utaulizwa ikiwa ungependa kushiriki barua pepe yako na washirika wa Let's Encrypt.

Iwapo hutaki kushiriki barua pepe yako, chapa tu neno hapana katika kidokezo na ubonyeze kitufe cha [enter] ili kuendelea. Baada ya vyeti vya kikoa chako kupatikana, utapokea madokezo muhimu ambayo yatakujulisha mahali ambapo vyeti vimehifadhiwa kwenye mfumo wako na muda wake wa matumizi utaisha.

12. Iwapo ungependa kupata cheti cha Hebu Tusimba kwa njia fiche kwa kutumia programu-jalizi ya “webroot” kwa kuongeza saraka ya webroot ya seva ya Nginx ya kikoa chako, toa amri ifuatayo kwa --webroot na -w bendera. Kwa chaguo-msingi, ikiwa haujabadilisha njia ya webroot ya Nginx, inapaswa kuwa katika /usr/local/www/nginx/ njia ya mfumo.

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

Kama ilivyo katika utaratibu wa --strandalone wa kupata cheti, utaratibu wa --webroot pia utakuomba utoe barua pepe kwa arifa za kusasisha cheti na usalama, ili kubofya a kukubaliana na Sheria na Masharti ya Hebu Tusimbe kwa Njia Fiche na hapana au ndiyo kushiriki au kutoshiriki anwani ya barua pepe ya Hebu Tusimbe kwa Njia Fiche kama inavyoonyeshwa kwenye sampuli iliyo hapa chini.

Fahamu kuwa mteja wa certbot anaweza kugundua barua pepe ghushi na hatakuruhusu uendelee kutoa cheti hadi utoe barua pepe halisi.

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

Hatua ya 4: Sasisha Vyeti vya Nginx TLS

13. Mahali palipopatikana vyeti na funguo za Let’s Encrypt katika FreeBSD ni /usr/local/etc/letsencrypt/live/www.yourdomain.com/ mfumo wa njia. Amri ya Toleo la ls ili kuonyesha vipengee vya cheti chako cha Hebu Tusimbe: faili ya mnyororo, faili ya msururu kamili, ufunguo wa faragha na faili ya cheti, kama inavyoonyeshwa katika mfano ufuatao.

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

14. Ili kusakinisha vyeti vya Hebu Tusimba kwa njia fiche kwa kikoa chako katika seva ya wavuti ya Nginx, fungua faili kuu ya usanidi ya Nginx au faili ya usanidi ya seva ya Nginx TLS, ikiwa ni faili tofauti, na urekebishe mistari iliyo hapa chini ili kuonyesha njia ya let's Encrypt. vyeti vilivyotolewa kama inavyoonyeshwa hapa chini.

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

Sasisha mistari ifuatayo ili ionekane kama katika sampuli hii:

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. Pia, ikiwa mstari ssl_dhparam upo katika usanidi wa Nginx SSL, unapaswa kuzalisha kitufe kipya cha 2048-bit Diffie-Hellman kwa amri ifuatayo:

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

16. Hatimaye, ili kuamilisha usanidi wa Nginx TLS, kwanza angalia usanidi wa kimataifa wa Nginx kwa hitilafu zinazowezekana za sintaksia na, kisha, anzisha upya huduma ya Nginx ili kutumia usanidi wa SSL kwa kutoa amri zifuatazo.

# nginx -t
# service nginx restart

17. Thibitisha ikiwa daemon ya Nginx inafunga mlango wa 443 kwa kutoa amri zifuatazo ambazo zinaweza kuorodhesha soketi zote za mtandao zilizofunguliwa katika mfumo katika hali ya kusikiliza.

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

18. Unaweza pia kutembelea anwani ya kikoa chako kupitia itifaki ya HTTPS kwa kufungua kivinjari na kuandika anwani ifuatayo ili kuthibitisha kuwa vyeti vya Let's Encrypt vinafanya kazi inavyotarajiwa. Kwa sababu unatumia vyeti vilivyotolewa na Mamlaka halali ya Cheti, hakuna hitilafu inayopaswa kuonyeshwa kwenye kivinjari.

https://www.yourdomain.com

19. Huduma ya Openssl inaweza pia kukusaidia kupata taarifa kuhusu cheti kilichopatikana kutoka kwa Let’s Encrypt CA, kwa kutekeleza amri kwa chaguo zifuatazo.

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

Iwapo unataka kulazimisha Nginx kuelekeza http zote kwa maombi ya https yaliyopokelewa kwa kikoa chako kwenye bandari 80 hadi HTTPS, fungua faili ya usanidi ya Nginx, pata maagizo ya seva ya bandari 80 na uongeze laini iliyo chini baada ya taarifa ya jina la seva kama inavyoonyeshwa kwenye mfano hapa chini. .

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

20. Kuweka upya kiotomatiki kwa cheti kilichotolewa na mamlaka ya Let's Encrypt kabla ya muda wake kuisha kunaweza kufanywa kwa kuratibu kazi ya cron kufanya mara moja kwa siku kwa kutoa amri ifuatayo.

# crontab -e

Jukumu la Cron la kusasisha cheti.

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

Ni hayo tu! Nginx sasa inaweza kutoa programu za wavuti zilizolindwa kwa wageni wako kwa kutumia cheti cha Let's Encrypt bila malipo.