Kuinka suojata Nginx SSL:llä ja Let's Encryptillä FreeBSD:ssä


Tässä oppaassa käsittelemme Nginx-verkkopalvelimen turvaamista FreeBSD:ssä TLS/SSL-varmenteilla, joita tarjoaa Let's Encrypt Certificate viranomainen. Näytämme myös, kuinka Lets' Encrypt -sertifikaatit uusitaan automaattisesti ennen vanhenemispäivää.

TLS, lyhenne sanoista Transport Layer Security, on protokolla, joka toimii HTTP-protokollan alla ja käyttää varmenteita ja avaimia pakettien kapseloimiseen ja salaa palvelimen ja asiakkaan tai tässä tapauksessa Nginx-verkkopalvelimen ja asiakkaan selaimen välillä vaihdetut tiedot yhteyden turvaamiseksi, jotta kolmas osapuoli, joka saattaa siepata liikennettä, ei voi purkaa salausta lähetystä.

Lue myös: Asenna Let's Encrypt for Apache FreeBSD:lle

Ilmaisen Let's Encrypt -sertifikaatin hankintaa FreeBSD:ssä voidaan yksinkertaistaa huomattavasti asentamalla certboot -asiakasapuohjelma, joka on virallinen Let's Encrypt -asiakasohjelma. varmenteiden luomiseen ja lataamiseen.

Vaatimukset

  1. Asenna FBEMP (Nginx, MariaDB ja PHP) pino FreeBSD:hen

Vaihe 1: Määritä Nginx TLS/SSL

1. Oletuksena TLS/SSL-palvelimen määritykset eivät ole käytössä FreeBSD:ssä, koska TLS-palvelin estää käskyt Kommentoidaan Nginx-oletusasetustiedostossa.

Aktivoidaksesi TLS-palvelimen Nginxissä avaa nginx.conf-määritystiedosto ja etsi rivi, joka määrittää :n alun. SSL-palvelin ja päivitä koko lohko alla olevan näytteen kaltaiseksi.

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

Nginx HTTPS-lohkoote:

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

Yllä oleva lohko sisältää SSL-lohkon lisäksi myös joitakin käskyjä gzip-pakkauksen ja FastCGI Process Managerin mahdollistamiseksi, joita käytetään PHP-koodin välittämiseen PHP-FPM<. yhdyskäytävä dynaamisten verkkosovellusten suorittamiseksi.

Kun olet lisännyt yllä olevan koodin Nginx-päämääritystiedostoon, älä käynnistä demonia uudelleen tai ota asetuksia käyttöön ennen kuin asennat ja hankit Let's Encrypt-varmenteen verkkotunnuksellesi.

Vaihe 2: Asenna Certbot Client FreeBSD:hen

2. Let's Encrypt certbot -asiakasapuohjelman asennusprosessi FreeBSD:ssä sisältää py-certbot -ohjelman lähdekoodin lataamisen ja sen paikallisen kääntämisen antamalla alla olevat komennot.

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

3. py-certbot-apuohjelman kääntäminen vie paljon aikaa verrattuna tavallisen binaaripaketin asentamiseen. Tänä aikana on ladattava joukko riippuvuuksia, jotka on käännetty paikallisesti FreeBSD:ssä.

Lisäksi näytölle tulee sarja kehotteita, joissa vaaditaan valitsemaan, mitä paketteja käytetään käännöshetkellä jokaiselle riippuvuudelle. Valitse ensimmäisessä näytössä seuraavat työkalut painamalla [välilyönti]-näppäintä python27-riippuvuuden kääntämiseksi alla olevan kuvan mukaisesti.

  • IPV6
  • LIBFFI
  • NLS
  • PYMALLOC
  • langat
  • UCS4 Unicode-tukeen

4. Valitse seuraavaksi DOCS ja THREADS gettext-tools-riippuvuudelle ja paina OK. > jatkaa alla olevan kuvan mukaisesti.

5. Jätä seuraavassa näytössä TESTIT-vaihtoehto pois käytöstä kohdassa libffi-3.2.1 ja siirry painamalla OK. edelleen.

6. Paina seuraavaksi välilyöntiä valitaksesi DOCS py27-enum34-riippuvuudelle, joka asentaa tämän dokumentaation. työkalu ja paina OK jatkaaksesi alla olevan kuvakaappauksen mukaisesti.

7. Asenna lopuksi esimerkkinäytteitä py27-openssl-riippuvuudesta painamalla [välilyönti]-näppäintä ja painamalla OK. > viimeistellä py-certbot-asiakasohjelman käännös- ja asennusprosessi.

8. Kun py-certbot-apuohjelman käännös- ja asennusprosessi on valmis, suorita alla oleva komento päivittääksesi työkalun paketin uusimpaan versioon, kuten on kuvattu alla kuvakaappauksia.

pkg install py27-certbot

9. Joidenkin ongelmien välttämiseksi se saattaa ilmetä ilmaista Let's Encrypt -varmennetta hankittaessa. Yleisin virhe on "pkg_resources.DistributionNotFound" , varmista, että järjestelmässäsi on myös seuraavat kaksi riippuvuutta: py27-salt ja py27-acme.

pkg install py27-salt
pkg install py27-acme

Vaihe 3: Asenna Let’s Encrypt Certificate for Nginx FreeBSD:lle

10. Saadaksesi Let's Encrypt erillisen varmenteen verkkotunnuksellesi suorittamalla seuraava komento ja antamalla sinulle verkkotunnuksen nimi ja kaikki aliverkkotunnukset, joille haluat hankkia varmenteita viittaamalla -d lippu.

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

11. Varmennetta luotaessa sinua pyydetään antamaan sähköpostiosoitteesi ja hyväksymään Let’s Encryptin käyttöehdot. Kirjoita a näppäimistöltä hyväksyäksesi ja jatkaaksesi, ja sinulta kysytään myös, oletko valmis jakamaan sähköpostiosoitteesi Let’s Encrypt -kumppaneiden kanssa.

Jos et halua jakaa sähköpostiosoitettasi, kirjoita no sana kehotteeseen ja paina [enter]-näppäintä jatkaaksesi. Kun verkkotunnuksesi varmenteet on saatu onnistuneesti, saat tärkeitä huomautuksia, jotka kertovat sinulle, missä varmenteet on tallennettu järjestelmässäsi ja milloin ne vanhenevat.

12. Jos haluat saada Let's Encrypt -varmenteen webroot-laajennuksella lisäämällä verkkotunnuksesi Nginx-palvelimen webroot-hakemiston , anna seuraava komento --webroot- ja -w-lippujen kanssa. Jos et ole muuttanut Nginx-verkkojuuripolkua, sen pitäisi sijaita oletusarvoisesti järjestelmäpolussa /usr/local/www/nginx/.

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

Kuten --strandalone-menettelyssä varmenteen saamiseksi, myös --webroot-menettely pyytää sinua antamaan sähköpostiosoitteen varmenteen uusimista ja turvailmoituksia varten. Paina a hyväksyäksesi Let's Encryptin käyttöehdot ja ei- tai kyllä-sähköpostiosoitteen jakamatta tai olematta jakamatta Let's Encrypt -kumppaneita alla olevan esimerkin mukaisesti.

Huomaa, että certbot-asiakasohjelma voi havaita väärennetyn sähköpostiosoitteen eikä anna sinun jatkaa varmenteen luomista ennen kuin annat oikean sähköpostiosoitteen.

Cerbot-näyte:
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

Vaihe 4: Päivitä Nginx TLS -sertifikaatit

13. Hankittujen Let’s Encrypt -sertifikaattien ja avainten sijainti FreeBSD:ssä on /usr/local/etc/letsencrypt/live/www.yourdomain.com/ järjestelmäpolku. Anna ls-komento näyttääksesi Let’s Encrypt -sertifikaatin komponentit: ketjutiedoston, fullchain-tiedoston, yksityisen avaimen ja varmennetiedoston seuraavan esimerkin mukaisesti.

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

14. Jotta voit asentaa Let's Encrypt -sertifikaatit verkkotunnuksellesi Nginx-verkkopalvelimeen, avaa Nginxin päämääritystiedosto tai Nginx TLS -palvelimen määritystiedosto, jos se on erillinen tiedosto, ja muokkaa alla olevia rivejä heijastaakseen Salataan myönnettyjen sertifikaattien polkua alla olevan kuvan mukaisesti.

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

Päivitä seuraavat rivit näyttämään tämän näytteen kaltaisilta:

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. Jos rivi ssl_dhparam on myös Nginx SSL -määrityksessä, sinun tulee luoda uusi 2048-bittinen Diffie–Hellman-näppäin seuraavalla komennolla:

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

16. Lopuksi, aktivoidaksesi Nginx TLS -määrityksen, tarkista ensin Nginxin globaali kokoonpano mahdollisten syntaksivirheiden varalta ja käynnistä sitten Nginx-palvelu uudelleen SSL-määrityksen käyttöönottoa varten antamalla seuraavat komennot.

nginx -t
service nginx restart

17. Varmista, että Nginx-daemon sitoo 443-porttia antamalla seuraavat komennot, jotka voivat luetella kaikki järjestelmän avatut verkkopistokkeet kuuntelutilassa.

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

18. Voit myös käydä verkkotunnuksessasi HTTPS-protokollan kautta avaamalla selaimen ja kirjoittamalla seuraavan osoitteen varmistaaksesi, että Let's Encrypt -sertifikaatit toimivat odotetulla tavalla. Koska käytät kelvollisen varmentajan luomia varmenteita, selaimessa ei pitäisi näkyä virhettä.

https://www.yourdomain.com

19. Openssl-apuohjelma voi myös auttaa sinua löytämään tietoja Let’s Encrypt CA:lta hankitusta sertifikaatista suorittamalla komennon seuraavilla vaihtoehdoilla.

openssl s_client -connect www.yourdomain.com:443

Jos haluat pakottaa Nginxin ohjaamaan kaikki http to https -pyynnöt, jotka vastaanotetaan verkkotunnuksellesi portista 80 HTTPSiin, avaa Nginx-määritystiedosto ja etsi portin 80 palvelindirektiivi. ja lisää alla oleva rivi palvelimen_nimi-lausekkeen jälkeen alla olevan esimerkin mukaisesti.

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

20. Let’s Encrypt -valtuutetun myöntämän varmenteen automaattisen uusimisen määrittäminen ennen niiden vanhenemista voidaan tehdä ajoittamalla cron-työ suoritettavaksi kerran päivässä antamalla seuraava komento.

crontab -e

Cron-tehtävä varmenteen uusimiseksi.

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

Siinä kaikki! Nginx voi nyt palvella suojattuja verkkosovelluksia vierailijoillesi käyttämällä ilmaisia Let’s Encrypt -varmenteita.