Vyhledávání na webu

Jak zabezpečit Nginx pomocí SSL a Let's Encrypt ve FreeBSD


V této příručce probereme, jak zabezpečit webový server Nginx v FreeBSD pomocí certifikátů TLS/SSL nabízených certifikátem Let's Encrypt Certificate Autorití. Ukážeme vám také, jak automaticky obnovit certifikáty Lets’ Encrypt před datem vypršení platnosti.

TLS, zkratka pro Transport Layer Security, je protokol, který běží pod protokolem HTTP a používá certifikáty a klíče k zapouzdření paketů a zašifrovat data vyměňovaná mezi serverem a klientem, nebo v tomto případě mezi webovým serverem Nginx a prohlížečem klienta, za účelem zabezpečení připojení, aby třetí strana, která by mohla zachytit provoz, nemohla dešifrovat přenos.

Čtěte také: Nainstalujte Let’s Encrypt for Apache na FreeBSD

Proces získání bezplatného certifikátu Let's Encrypt v FreeBSD lze výrazně zjednodušit instalací klientského nástroje certboot, což je oficiální používaný klient Let's Encrypt pro generování a stahování certifikátů.

Požadavky

  1. Nainstalujte FBEMP (Nginx, MariaDB a PHP) stack ve FreeBSD

Krok 1: Nakonfigurujte Nginx TLS/SSL

1. Ve výchozím nastavení není konfigurace serveru TLS/SSL v FreeBSD povolena, protože příkazy serveru TLS blokují jsou komentovány ve výchozím konfiguračním souboru Nginx.

Chcete-li aktivovat server TLS v Nginx, otevřete konfigurační soubor nginx.conf a vyhledejte řádek, který definuje začátek SSLserver a aktualizujte celý blok tak, aby vypadal jako v níže uvedené ukázce.

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

Výňatek z bloku Nginx HTTPS:

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

Výše uvedený blok kromě bloku SSL obsahuje také některé příkazy pro povolení komprese gzip a FastCGI Process Manager, který se používá k předávání kódu PHP do PHP-FPM< brána pro spouštění dynamických webových aplikací.

Po přidání výše uvedeného kódu do hlavního konfiguračního souboru Nginx nerestartujte démona ani nepoužívejte nastavení před instalací a získáním certifikátu Let's Encrypt pro vaši doménu.

Krok 2: Nainstalujte klienta Certbot do FreeBSD

2. Proces instalace klientského nástroje Let's Encrypt certbot ve FreeBSD zahrnuje stažení zdrojového kódu pro py-certbot a jeho místní kompilaci vydáním níže uvedené příkazy.

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

3. Kompilace nástroje py-certbot zabere spoustu času ve srovnání s instalací běžného binárního balíčku. Během této doby je nutné stáhnout řadu závislostí zkompilovaných lokálně ve FreeBSD.

Na vaší obrazovce se také objeví řada výzev, které vás požadují, abyste vybrali, jaké balíčky budou použity při kompilaci pro každou závislost. Na první obrazovce vyberte následující nástroje stisknutím klávesy [space] pro kompilaci závislosti python27, jak je znázorněno na obrázku níže.

  • IPV6
  • LIBFFI
  • NLS
  • PYMALLOC
  • VLÁKNA
  • UCS4 pro podporu Unicode

4. Dále vyberte DOCS a THREADS pro závislost gettext-tools a stiskněte OK pokračujte, jak je znázorněno na obrázku níže.

5. Na další obrazovce ponechte možnost TESTS pro libffi-3.2.1 vypnutou a stisknutím OK se přesuňte dále.

6. Dále stiskněte mezerník a vyberte DOCS pro závislost py27-enum34, která nainstaluje dokumentaci k tomuto a pokračujte stisknutím OK, jak je znázorněno na níže uvedeném snímku obrazovky.

7. Nakonec zvolte instalaci ukázkových ukázek pro závislost py27-openssl stisknutím klávesy [space] a stisknutím OK pro dokončení procesu kompilace a instalace klienta py-certbot.

8. Po dokončení procesu kompilace a instalace nástroje py-certbot spusťte níže uvedený příkaz, abyste upgradovali nástroj na nejnovější verzi balíčku, jak je znázorněno v níže uvedené snímky obrazovky.

pkg install py27-certbot

9. Aby se předešlo některým problémům, které mohou nastat při získávání bezplatného certifikátu Let's Encrypt. Nejčastější chybou je „pkg_resources.DistributionNotFound“ , ujistěte se, že ve vašem systému jsou také následující dvě závislosti: py27-salt a py27-acme.

pkg install py27-salt
pkg install py27-acme

Krok 3: Nainstalujte Let’s Encrypt Certificate for Nginx na FreeBSD

10. Chcete-li pro svou doménu získat samostatný certifikát Let's Encrypt, spusťte následující příkaz a zadejte název domény a všechny subdomény, pro které chcete certifikáty získat, pomocí -d příznak.

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

11. Při generování certifikátu budete požádáni, abyste zadali svou e-mailovou adresu a vyjádřili souhlas s podmínkami služby Let’s Encrypt. Chcete-li souhlasit a pokračovat, zadejte na klávesnici a a budete také dotázáni, zda chcete svou e-mailovou adresu sdílet s partnery Let’s Encrypt.

V případě, že svou e-mailovou adresu sdílet nechcete, stačí do výzvy zadat slovo no a pokračovat stisknutím klávesy [enter]. Po úspěšném získání certifikátů pro vaši doménu obdržíte několik důležitých poznámek, které vás informují o tom, kde jsou certifikáty ve vašem systému uloženy a kdy vyprší jejich platnost.

12. V případě, že chcete získat certifikát Let's Encrypt pomocí pluginu „webroot“ přidáním adresáře webroot serveru Nginx pro vaši doménu , zadejte následující příkaz s příznaky --webroot a -w. Ve výchozím nastavení, pokud jste nezměnili cestu webroot Nginx, měla by být umístěna v systémové cestě /usr/local/www/nginx/.

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

Stejně jako v postupu --strandalone pro získání certifikátu, postup --webroot vás také požádá o zadání e-mailové adresy pro obnovení certifikátu a upozornění na zabezpečení, stiskněte a, abyste souhlasili s podmínkami Let's Encrypt a ne nebo ano sdíleli nebo nesdíleli e-mailovou adresu partnerům Let's Encrypt, jak je znázorněno v níže uvedené ukázce.

Uvědomte si, že klient certbot dokáže detekovat falešnou e-mailovou adresu a nedovolí vám pokračovat ve generování certifikátu, dokud nezadáte skutečnou e-mailovou adresu.

Ukázka Cerbot:
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

Krok 4: Aktualizujte certifikáty Nginx TLS

13. Umístění získaných certifikátů a klíčů Let’s Encrypt ve FreeBSD je /usr/local/etc/letsencrypt/live/www.yourdomain.com/ systémová cesta. Příkaz Issue ls, abyste zobrazili součásti vašeho certifikátu Let’s Encrypt: soubor řetězce, soubor fullchain, soukromý klíč a soubor certifikátu, jak ukazuje následující příklad.

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

14. Chcete-li nainstalovat certifikáty Let's Encrypt pro vaši doménu na webový server Nginx, otevřete hlavní konfigurační soubor Nginx nebo konfigurační soubor pro server Nginx TLS, pokud se jedná o samostatný soubor, a upravte níže uvedené řádky aby odrážely cestu vydaných certifikátů Encrypt, jak je znázorněno níže.

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

Aktualizujte následující řádky, aby vypadaly jako v této ukázce:

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. Pokud je v konfiguraci Nginx SSL přítomen řádek ssl_dhparam, měli byste vygenerovat nový bit 2048 Klávesa Diffie–Hellman s následujícím příkazem:

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

16. Nakonec, abyste mohli aktivovat konfiguraci Nginx TLS, nejprve zkontrolujte globální konfiguraci Nginx, zda neobsahuje možné chyby syntaxe, a poté restartujte službu Nginx, aby se použila konfigurace SSL vydáním následujících příkazů.

nginx -t
service nginx restart

17. Potvrďte, zda se démon Nginx váže na 443 port vydáním následujících příkazů, které mohou vypsat všechny otevřené síťové zásuvky v systému ve stavu naslouchání.

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

18. Adresu své domény můžete navštívit také prostřednictvím protokolu HTTPS. Otevřete prohlížeč a zadejte následující adresu, abyste si ověřili, že certifikáty Let’s Encrypt fungují podle očekávání. Protože používáte certifikáty vygenerované platnou certifikační autoritou, neměla by se v prohlížeči zobrazit žádná chyba.

https://www.yourdomain.com

19. Nástroj Openssl vám také může pomoci najít informace o certifikátu získaném od Let’s Encrypt CA spuštěním příkazu s následujícími možnostmi.

openssl s_client -connect www.yourdomain.com:443

V případě, že chcete přinutit Nginx, aby nasměroval všechny požadavky http na https přijaté pro vaši doménu na portu 80 na HTTPS, otevřete konfigurační soubor Nginx a vyhledejte direktivu serveru pro port 80 a přidejte řádek níže za příkaz server_name, jak je znázorněno v příkladu níže.

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

20. Nastavení automatického obnovení certifikátu vydaného autoritou Let’s Encrypt před vypršením platnosti lze provést naplánováním úlohy cron tak, aby se spouštěla jednou denně, zadáním následujícího příkazu.

crontab -e

Cron úkol obnovit certifikát.

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

To je vše! Nginx nyní může vašim návštěvníkům poskytovat zabezpečené webové aplikace pomocí bezplatných certifikátů Let’s Encrypt.