Wéi Séchert Nginx mat SSL a Loosst eis am FreeBSD verschlësselen


An dësem Guide wäerte mir diskutéieren wéi Dir den Nginx Webserver am FreeBSD mat TLS/SSL Zertifikater ofgeséchert gëtt, ugebuede vu Let's Encrypt Certificate Authority. Mir weisen Iech och wéi Dir d'Lets 'Encrypt Zertifikater automatesch erneiert virum Verfallsdatum.

TLS, en Akronym fir Transport Layer Security, ass e Protokoll deen ënner HTTP Protokoll leeft an Zertifikater a Schlësselen benotzt fir d'Päckchen ze kapsuléieren an d'Daten ze verschlësselen, déi tëscht engem Server an engem Client ausgetosch ginn, oder an dësem Fall tëscht Nginx Webserver an dem Client seng. Browser, fir d'Verbindung ze sécheren, sou datt en Drëtte, deen den Traffic offänke kéint, d'Transmissioun net entschlësselen.

De Prozess fir e gratis Let's Encrypt Zertifikat an FreeBSD ze kréien kann immens vereinfacht ginn andeems Dir certboot Client Utility installéiert, dat ass den offiziellen Let's Encrypt Client deen benotzt gëtt fir Certificaten ze generéieren an erofzelueden.

  1. Installéiert FBEMP (Nginx, MariaDB a PHP) Stack am FreeBSD

Schrëtt 1: Nginx TLS/SSL konfiguréieren

1. Par défaut ass d'TLS/SSL Server Konfiguratioun net am FreeBSD aktivéiert, well d'TLS Server Block Aussoen an der Nginx Standard Konfiguratiounsdatei kommentéiert ginn.

Fir den TLS Server an Nginx z'aktivéieren, öffnen d'nginx.conf Konfiguratiounsdatei, sicht no der Linn déi den Start vum SSL Server definéiert an aktualiséieren de ganze Block fir ze kucken wéi an der folgender Probe.

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

Nginx HTTPS Block Extrait:

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

Deen uewe genannte Block, nieft dem SSL Block, enthält och e puer Aussoe fir d'gzip Kompressioun an de FastCGI Process Manager z'aktivéieren, benotzt fir PHP Code op PHP-FPM Gateway ze passéieren fir dynamesch Webapplikatiounen auszeféieren.

Nodeems Dir den uewe genannte Code an d'Nginx Haaptkonfiguratiounsdatei bäigefüügt hutt, start den Daemon net nei oder benotzt d'Astellungen ier Dir e Let's Encrypt Zertifikat fir Är Domain installéiert an kritt.

Schrëtt 2: Installéiert Certbot Client an FreeBSD

2. De Prozess fir d'Let's Encrypt certbot Client Utility an FreeBSD z'installéieren beinhalt d'Download vum Quellcode fir py-certbot a lokal ze kompiléieren, andeems Dir déi folgend Kommandoen ausginn.

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

3. D'Kompilatioun vum py-certbot Utility brauch vill Zäit am Verglach mat der Installatioun vun engem reguläre binäre Package. Wärend dëser Zäit muss eng Serie vun Ofhängegkeeten erofgeluede ginn a lokal kompiléiert am FreeBSD.

Och eng Serie vu Prompts erschéngen op Ärem Écran, a verlaangt datt Dir wielt wéi eng Packagen fir all Ofhängegkeet benotzt ginn. Um éischten Écran, wielt déi folgend Tools, andeems Dir [Space] Schlëssel dréckt, fir d'Python27 Ofhängegkeet ze kompiléieren, wéi am Bild hei ënnen illustréiert.

  • IPV6
  • LIBFFI
  • NLS
  • PYMALLOC
  • THREADS
  • UCS4 fir Unicode Ënnerstëtzung

4. Nächst, wielt DOCS an THREADS fir gettext-Tools Ofhängegkeet an dréckt OK fir weiderzemaachen wéi am Bild hei ënnen.

5. Op den nächsten Écran verloossen d'TESTS Optioun behënnert fir libffi-3.2.1 an Press OK fir weider ze plënneren.

6. Nächst, Hit Raum fir DOCS fir py27-enum34 Ofhängegkeet ze wielen, déi d'Dokumentatioun fir dëst Tool installéiere wäert, an dréckt OK fir weiderzemaachen, wéi am Screenshot hei ënnen illustréiert.

7. Endlech, wielt fir Beispill Echantillon fir py27-openssl Ofhängegkeet z'installéieren andeems Dir [Space] Schlëssel dréckt a klickt OK fir de Kompiléierungs- an Installatiounsprozess fir py-certbot Client ofzeschléissen.

8. Nodeems de Prozess vun der Zesummesetzung an der Installatioun vum py-certbot Utility fäerdeg ass, fuert de Kommando hei ënnen fir d'Tool op déi lescht Versioun vum Package ze upgraden wéi an de Screenshots hei ënnen illustréiert.

# pkg install py27-certbot

9. Fir e puer Problemer ze vermeiden, kann et optrieden wann Dir e gratis Let's Encrypt Zertifika kritt, deen heefegste Feeler ass \pkg_resources.DistributionNotFound, gitt sécher datt déi folgend zwou Ofhängegkeeten och an Ärem System präsent sinn: py27-salt a py27- acme.

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

Schrëtt 3: Installéiere Let's Encrypt Certificate fir Nginx op FreeBSD

10. Fir e Let's Encrypt Standalone Zertifikat fir Ären Domain ze kréien, fuert de folgende Kommando aus a gitt Iech Domain Numm an all Ënnerdomainen fir déi Dir Certificaten wëllt kréien andeems Dir de -d Fändel implizéiert.

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

11. Beim Generéiere vum Zertifika gitt Dir gefrot fir Är E-Mailadress anzeginn an averstane mat Let's Encrypt Servicebedéngungen. Typ a vun der Tastatur fir averstanen a weiderzemaachen an Dir wäert och gefrot ginn ob Dir wëllt Är E-Mailadress mat Let's Encrypt Partner ze deelen.

Am Fall wou Dir Är E-Mailadress net deele wëllt, gitt einfach kee Wuert an der Ufro an dréckt op [Enter] Schlëssel fir weiderzemaachen. Nodeems d'Zertifikater fir Ären Domain erfollegräich kritt goufen, kritt Dir e puer wichteg Notizen, déi Iech informéieren wou d'Zertifikater an Ärem System gespäichert sinn a wéini se oflafen.

12. Am Fall wou Dir e Let's Encrypt Zertifikat mat dem webroot Plugin wëllt kréien andeems Dir de Webroot Verzeechnes vum Nginx Server fir Är Domain bäidréit, gitt de folgende Kommando mat dem --webroot an -w Fändelen. Par défaut, wann Dir den Nginx Webroot Wee net geännert hutt, sollt et an /usr/local/www/nginx/ Systemwee sinn.

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

Wéi an der --strandalone Prozedur fir en Zertifika ze kréien, wäert d'Prozedur --webroot Iech och froen eng E-Mailadress fir Zertifikat Erneierung a Sécherheetsnotifikatiounen ze liwweren, fir ze drécken a fir mat Let's Encrypt Konditioune averstanen an nee oder jo fir oder net d'E-Mailadress ze deelen.

Sidd bewosst datt certbot Client eng gefälscht E-Mailadress entdecken kann a léisst Iech net weider mat engem Zertifikat generéieren bis Dir eng richteg E-Mailadress gitt.

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

Schrëtt 4: Update Nginx TLS Certificaten

13. D'Plaz vun kritt Let's Encrypt Certificaten a Schlësselen am FreeBSD ass /usr/local/etc/letsencrypt/live/www.yourdomain.com/ System Wee. Issue ls Kommando fir d'Komponente vun Ärem Let's Encrypt Zertifika ze weisen: d'Kettedatei, d'Fullchain Datei, de private Schlëssel an d'Zertifikatdatei, wéi am folgende Beispill illustréiert.

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

14. Fir Let's Encrypt Certificates fir Ären Domain am Nginx Webserver z'installéieren, öffnen d'Nginx Haaptkonfiguratiounsdatei oder d'Konfiguratiounsdatei fir den Nginx TLS Server, am Fall wou et eng separat Datei ass, a ännert d'Linnen hei ënnen fir de Wee ze reflektéieren. erausginn Certificaten wéi ënnert illustréiert.

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

Update déi folgend Zeilen sou wéi an dësem Probe ausgesinn:

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. Och wann d'Linn ssl_dhparam an der Nginx SSL Konfiguratioun präsent ass, sollt Dir en neien 2048 Bit Diffie-Hellman Schlëssel mat dem folgenden Kommando generéieren:

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

16. Schlussendlech, fir d'Nginx TLS Konfiguratioun z'aktivéieren, kontrolléiert d'Nginx global Konfiguratioun fir méiglech Syntaxfehler an dann den Nginx Service nei unzefänken fir d'SSL Konfiguratioun z'applizéieren andeems Dir déi folgend Kommandoen ausgëtt.

# nginx -t
# service nginx restart

17. Bestätegt ob Nginx Daemon op 443 Hafen verbindlech ass, andeems Dir déi folgend Kommandoen ausgëtt, déi all opgemaach Netzwierk Sockets am System am Lauschtertstaat lëschten.

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

18. Dir kënnt och Är Domain Adress iwwer HTTPS Protokoll besichen andeems Dir e Browser opmaacht an déi folgend Adress tippt fir ze bestätegen datt Let's Encrypt Certificaten funktionnéieren wéi erwaart. Well Dir benotzt Zertifikater generéiert vun enger valabel Zertifika Autoritéit, kee Feeler soll am Browser ugewisen ginn.

https://www.yourdomain.com

19. Openssl Utility kann Iech och hëllefen Informatiounen iwwer e Certificat ze fannen deen aus Let's Encrypt CA kritt gëtt, andeems Dir de Kommando mat de folgenden Optiounen ausféiert.

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

Am Fall wou Dir Nginx forcéiere wëllt all http op https Ufroe fir Ären Domain op Port 80 op HTTPS ze dirigéieren, öffnen d'Nginx Konfiguratiounsdatei, lokaliséiert d'Serverdirektiv fir den Hafen 80 a füügt d'Linn ënnen no der Server_name Ausso wéi illustréiert am Beispill hei ënnen. .

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

20. Astelle vun automatesch Erneierung fir Zertifikat ausgestallt vun Let's Encrypt Autoritéit ier se oflafen kann gemaach ginn andeems Dir eng Cron-Job plangt fir eemol am Dag ze lafen andeems Dir de folgende Kommando ausstellt.

# crontab -e

Cron Aufgab fir Zertifikat ze erneieren.

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

Dat ass alles! Nginx kann elo geséchert Webapplikatioune fir Är Besucher déngen mat Let's Encrypt gratis Certificaten.