Hvernig á að tryggja Nginx með SSL og við skulum dulkóða í FreeBSD


Í þessari handbók munum við ræða hvernig á að tryggja Nginx vefþjón í FreeBSD með TLS/SSL vottorðum sem Let's Encrypt Certificate Authority býður upp á. Við munum einnig sýna þér hvernig á að endurnýja Lets' Encrypt vottorðin sjálfkrafa áður en rennur út.

TLS, skammstöfun fyrir Transport Layer Security, er samskiptaregla sem keyrir undir HTTP-samskiptareglum og notar vottorð og lykla til að hylja pakkana og dulkóða gögnin sem skiptast á milli netþjóns og viðskiptavinar, eða í þessu tilviki milli Nginx vefþjóns og viðskiptavinar. vafra, til að tryggja tenginguna, þannig að þriðji aðili, sem gæti stöðvað umferð, geti ekki afkóðað sendinguna.

Ferlið við að fá ókeypis Let's Encrypt vottorð í FreeBSD er hægt að einfalda til muna með því að setja upp certboot biðlara tól, sem er opinberi Let's Encrypt viðskiptavinurinn sem notaður er til að búa til og hlaða niður vottorðum.

  1. Settu upp FBEMP (Nginx, MariaDB og PHP) stafla í FreeBSD

Skref 1: Stilltu Nginx TLS/SSL

1. Sjálfgefið er að stillingar TLS/SSL miðlara eru ekki virkjaðar í FreeBSD vegna þess að blokkunaryfirlýsingar TLS miðlara eru settar fram í Nginx sjálfgefna stillingarskrá.

Til að virkja TLS netþjóninn í Nginx, opnaðu nginx.conf stillingarskrá, leitaðu að línunni sem skilgreinir upphaf SSL netþjóns og uppfærðu alla blokkina þannig að hún lítur út eins og í sýnishorninu hér að neðan.

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

Nginx HTTPS blokk útdráttur:

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

Kubburinn hér að ofan, til viðbótar við SSL blokk, inniheldur einnig nokkrar yfirlýsingar til að virkja gzip þjöppun og FastCGI Process Manager, notað til að senda PHP kóða til PHP-FPM gáttar til að keyra kraftmikil vefforrit.

Eftir að þú hefur bætt ofangreindum kóða við Nginx aðalstillingarskrá skaltu ekki endurræsa púkann eða nota stillingarnar áður en þú setur upp og færð Let's Encrypt vottorð fyrir lénið þitt.

Skref 2: Settu upp Certbot viðskiptavin í FreeBSD

2. Ferlið við að setja upp Let's Encrypt certbot biðlara tólið í FreeBSD felur í sér að hlaða niður frumkóðanum fyrir py-certbot og setja hann saman á staðnum með því að gefa út skipanirnar hér að neðan.

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

3. Að setja saman py-certbot tólið tekur mikinn tíma miðað við að setja upp venjulegan tvöfaldan pakka. Á þessum tíma þarf að hlaða niður röð af ósjálfstæðum og safnað saman á staðnum í FreeBSD.

Einnig mun röð af leiðbeiningum birtast á skjánum þínum, sem krefst þess að þú veljir hvaða pakkar verða notaðir við samantektartíma fyrir hverja ósjálfstæði. Á fyrsta skjánum skaltu velja eftirfarandi verkfæri, með því að ýta á [bil] takkann, til að setja saman python27 ósjálfstæði, eins og sýnt er á myndinni hér að neðan.

  • IPV6
  • LIBFFI
  • NLS
  • PYMALLOC
  • Þræðir
  • UCS4 fyrir Unicode stuðning

4. Næst skaltu velja DOCS og THREADS fyrir gettext-tools háð og ýttu á OK til að halda áfram eins og sýnt er á myndinni hér að neðan.

5. Á næsta skjá skaltu skilja prófunina óvirkan fyrir libffi-3.2.1 og ýta á OK til að fara lengra.

6. Næst skaltu smella á bil til að velja DOCS fyrir py27-enum34 háð, sem mun setja upp skjölin fyrir þetta tól, og ýttu á OK til að halda áfram, eins og sýnt er á skjámyndinni hér að neðan.

7. Að lokum skaltu velja að setja upp sýnishorn fyrir py27-openssl háð með því að ýta á [bil] takkann og ýta á OK til að klára samantektina og uppsetningarferlið fyrir py-certbot biðlara.

8. Eftir að ferlinu við að setja saman og setja upp py-certbot tólið er lokið skaltu keyra skipunina hér að neðan til að uppfæra tólið í nýjustu útgáfu pakkans eins og sýnt er á skjámyndunum hér að neðan.

# pkg install py27-certbot

9. Til að forðast sum vandamál gæti það komið upp þegar þú færð ókeypis Let's Encrypt vottorð, algengasta villan er \pkg_resources.DistributionNotFound, vertu viss um að eftirfarandi tvær ósjálfstæðir séu einnig til staðar í kerfinu þínu: py27-salt og py27- acme.

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

Skref 3: Settu upp Let's Encrypt Certificate fyrir Nginx á FreeBSD

10. Til þess að fá Let's Encrypt sjálfstætt vottorð fyrir lénið þitt skaltu keyra eftirfarandi skipun og gefa þér lén og öll undirlén sem þú vilt fá vottorð fyrir með því að gefa í skyn -d fánann.

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

11. Á meðan þú býrð til vottorðið verðurðu beðinn um að slá inn netfangið þitt og samþykkja þjónustuskilmála Let's Encrypt. Sláðu inn a af lyklaborðinu til að samþykkja og halda áfram og þú verður líka spurður hvort þú viljir deila netfanginu þínu með Let's Encrypt samstarfsaðilum.

Ef þú vilt ekki deila netfanginu þínu skaltu bara slá inn ekkert orð í hvetjunni og ýta á [enter] takkann til að halda áfram. Eftir að skírteinunum fyrir lénið þitt hefur tekist að fá, færðu nokkrar mikilvægar athugasemdir sem munu upplýsa þig hvar skírteinin eru geymd í kerfinu þínu og hvenær þau renna út.

12. Ef þú vilt fá Let's Encrypt vottorð með því að nota „webroot“ viðbótina með því að bæta við webroot skránni á Nginx þjóninum fyrir lénið þitt, gefðu út eftirfarandi skipun með --webroot og -w fánar. Sjálfgefið, ef þú hefur ekki breytt Nginx vefrótarslóð, ætti hún að vera staðsett í /usr/local/www/nginx/ kerfisslóð.

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

Eins og í --strandalone málsmeðferðinni til að fá vottorð, mun --webroot málsmeðferðin einnig biðja þig um að gefa upp netfang fyrir endurnýjun vottorðs og öryggistilkynningar, til að ýta á a til að samþykkja Let's Encrypt skilmála og skilyrði og nei eða við eða ekki deila netfanginu Let's Encrypt samstarfsaðilum eins og sýnt er í sýnishorninu hér að neðan.

Vertu meðvituð um að certbot viðskiptavinur getur greint falsað netfang og mun ekki leyfa þér að halda áfram að búa til vottorð fyrr en þú gefur upp raunverulegt netfang.

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

Skref 4: Uppfærðu Nginx TLS vottorð

13. Staðsetning fengin Let's Encrypt vottorð og lykla í FreeBSD er /usr/local/etc/letsencrypt/live/www.yourdomain.com/ kerfisslóð. Gefðu út ls skipunina til að sýna íhluti Let's Encrypt vottorðsins þíns: keðjuskrána, fullchain skrána, einkalykilinn og vottorðaskrána, eins og sýnt er í eftirfarandi dæmi.

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

14. Til þess að setja upp Let's Encrypt vottorð fyrir lénið þitt á Nginx vefþjóninum, opnaðu Nginx aðalstillingarskrána eða stillingarskrána fyrir Nginx TLS netþjóninn, ef það er aðskilin skrá, og breyttu línunum hér að neðan til að endurspegla slóðina til við skulum dulkóða gefið út skírteini eins og sýnt er hér að neðan.

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

Uppfærðu eftirfarandi línur til að líta út eins og í þessu sýnishorni:

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. Einnig, ef línan ssl_dhparam er til staðar í Nginx SSL uppsetningu, ættir þú að búa til nýjan 2048 bita Diffie–Hellman lykil með eftirfarandi skipun:

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

16. Að lokum, til að virkja Nginx TLS stillingar, athugaðu fyrst Nginx alþjóðlega stillingu fyrir hugsanlegar setningafræðivillur og endurræstu síðan Nginx þjónustuna til að beita SSL stillingunni með því að gefa út eftirfarandi skipanir.

# nginx -t
# service nginx restart

17. Staðfestu hvort Nginx púkinn sé bindandi á 443 tengi með því að gefa út eftirfarandi skipanir sem geta skráð allar opnar nettengi í kerfinu í hlustunarástandi.

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

18. Þú getur líka heimsótt lénið þitt í gegnum HTTPS samskiptareglur með því að opna vafra og slá inn eftirfarandi heimilisfang til að staðfesta að Let's Encrypt vottorð virki eins og búist er við. Vegna þess að þú ert að nota vottorð sem eru búin til af gildri vottunaraðila ætti engin villa að birtast í vafranum.

https://www.yourdomain.com

19. Openssl tólið getur einnig hjálpað þér að finna upplýsingar um skírteini sem fæst frá Let's Encrypt CA, með því að keyra skipunina með eftirfarandi valkostum.

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

Ef þú vilt neyða Nginx til að beina öllum http til https beiðnum sem berast fyrir lénið þitt á höfn 80 til HTTPS, opnaðu Nginx stillingarskrána, finndu miðlaratilskipunina fyrir höfn 80 og bættu við línunni hér að neðan á eftir server_name yfirlýsingu eins og sýnt er í dæminu hér að neðan .

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

20. Að setja upp sjálfvirka endurnýjun fyrir skírteini sem gefið er út af Let's Encrypt yfirvaldi áður en þau renna út er hægt að gera með því að skipuleggja cron starf til að keyra einu sinni á dag með því að gefa út eftirfarandi skipun.

# crontab -e

Cron verkefni til að endurnýja vottorð.

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

Það er allt og sumt! Nginx getur nú þjónað öruggum vefforritum fyrir gesti þína með Let's Encrypt ókeypis vottorðum.