Sådan sikres Nginx med SSL, og lad os kryptere i FreeBSD
I denne vejledning diskuterer vi, hvordan du beskytter Nginx-webserver i FreeBSD med TLS/SSL-certifikater, der tilbydes af Let’s Encrypt Certificate Authority. Vi viser dig også, hvordan du automatisk forny Lets 'Encrypt-certifikater inden udløbsdatoen.
TLS, et akronym for Transport Layer Security, er en protokol, der kører under HTTP-protokol og bruger certifikater og nøgler til at indkapsle pakkerne og kryptere de data, der udveksles mellem en server og en klient, eller i dette tilfælde mellem Nginx-webserver og klientens browser for at sikre forbindelsen, så en tredjepart, der muligvis opfanger trafik, ikke kan dekryptere transmissionen.
Processen med at få et gratis Lad os kryptere certifikat i FreeBSD kan forenkles meget ved at installere certboot-klientværktøj, som er den officielle Lad os kryptere klient, der bruges til at generere og downloade certifikater.
- Installer FBEMP (Nginx, MariaDB og PHP) stak i FreeBSD
Trin 1: Konfigurer Nginx TLS/SSL
1. Som standard er TLS/SSL-serverkonfigurationen ikke aktiveret i FreeBSD, fordi TLS-serverblokudsagnene er kommenteret i Nginx-standardkonfigurationsfilen.
For at aktivere TLS-serveren i Nginx skal du åbne nginx.conf-konfigurationsfilen, søge efter den linje, der definerer starten af SSL-serveren, og opdatere hele blokken, så den ser ud i nedenstående eksempel.
# nano /usr/local/etc/nginx/nginx.conf
Nginx HTTPS-blokuddrag:
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; } }
Ovenstående blok udover SSL-blok indeholder også nogle udsagn til aktivering af gzip-komprimering og FastCGI Process Manager, der bruges til at overføre PHP-kode til PHP-FPM-gateway for at køre dynamiske webapplikationer.
Når du har tilføjet ovenstående kode til Nginx-hovedkonfigurationsfil, skal du ikke genstarte dæmonen eller anvende indstillingerne, før du installerer og får et Lad os kryptere certifikat til dit domæne.
Trin 2: Installer Certbot Client i FreeBSD
2. Processen med installation af Lad os kryptere certbot-klientværktøjet i FreeBSD indebærer at downloade kildekoden til py-certbot og kompilere den lokalt ved at udstede nedenstående kommandoer.
# cd /usr/ports/security/py-certbot # make install clean
3. Kompilering af py-certbot-hjælpeprogrammet tager meget tid at sammenligne med installation af en almindelig binær pakke. I løbet af denne periode kræves der, at en række afhængigheder downloades i kompileret lokalt i FreeBSD.
Der vises også en række meddelelser på din skærm, der kræver, at du vælger, hvilke pakker der skal bruges på kompileringstidspunktet for hver afhængighed. På det første skærmbillede skal du vælge følgende værktøjer ved at trykke på [mellemrum] -tasten for at kompilere python27-afhængigheden, som vist i nedenstående billede.
- IPV6
- LIBFFI
- NLS
- PYMALLOC
- TRÅDER
- UCS4 til Unicode-understøttelse
4. Vælg derefter DOCS og THREADS for afhængighed af gettext-værktøjer og tryk på OK for at fortsætte som vist i nedenstående billede.
5. På næste skærmbillede skal du vælge TESTS deaktiveret for libffi-3.2.1 og trykke på OK for at komme videre.
6. Tryk derefter på mellemrum for at vælge DOCS for afhængighed af py27-enum34, som vil installere dokumentationen til dette værktøj, og tryk på OK for at fortsætte som vist i nedenstående skærmbillede.
7. Endelig skal du vælge at installere eksempler på eksempler for py27-openssl-afhængighed ved at trykke på [mellemrum] -tasten og trykke på OK for at afslutte kompilerings- og installationsprocessen for py-certbot-klienten.
8. Når processen med at kompilere og installere py-certbot-hjælpeprogrammet er færdig, skal du køre kommandoen nedenfor for at opgradere værktøjet til den nyeste version af pakken som illustreret i nedenstående skærmbilleder.
# pkg install py27-certbot
9. For at undgå nogle problemer kan det forekomme, mens du får et gratis Let's Encrypt-certifikat, hvor den mest almindelige fejl er "pkg_resources.DistributionNotFound", skal du sørge for, at følgende to afhængigheder også er til stede i dit system: py27-salt og py27-acme .
# pkg install py27-salt # pkg install py27-acme
Trin 3: Installer Lad os kryptere certifikat til Nginx på FreeBSD
10. For at få et Lad os kryptere et enkeltstående certifikat til dit domæne skal du køre følgende kommando og give dig domænenavn og alle underdomæner, som du ønsker at få certifikater til, ved at antyde -d
-flagget.
# certbot certonly --standalone -d yourdomain.com -d www.yourdomain.com
11. Mens du genererer certifikatet, bliver du bedt om at indtaste din e-mail-adresse og at være enig med Lad os kryptere servicevilkårene. Skriv a
fra tastaturet for at blive enige og fortsætte, og du bliver også spurgt, om du er villig til at dele din e-mail-adresse med Lad os kryptere partnere.
Hvis du ikke vil dele din e-mail-adresse, skal du bare skrive no
word i prompten og trykke på [enter] -tasten for at fortsætte. Når certifikaterne for dit domæne er opnået, modtager du nogle vigtige noter, der informerer dig om, hvor certifikaterne er gemt i dit system, og hvornår de udløber.
12. Hvis du ønsker at få et Let's Encrypt-certifikat ved hjælp af "webroot" -pluginet ved at tilføje webroot-biblioteket på Nginx-serveren til dit domæne, skal du udstede følgende kommando med --webroot
og -w
flag. Hvis du ikke har ændret Nginx webroot-sti, skal den som standard være placeret i/usr/local/www/nginx/systemsti.
# certbot certonly --webroot -w /usr/local/www/nginx/ -d yourdomain.com -d www.yourdomain.com
Som i --strandalone
-proceduren for at få et certifikat, vil --webroot
-proceduren også bede dig om at angive en e-mail-adresse til certifikatfornyelse og sikkerhedsmeddelelser, for at trykke på < kode> en for at være enig med Let's Encrypt vilkår og betingelser og nej
eller ja
til eller ikke dele e-mail-adressen Let's Encrypt partners som illustreret i nedenstående eksempel.
Vær opmærksom på, at certbot-klienten kan registrere en falsk e-mail-adresse og ikke lade dig fortsætte med at generere et certifikat, før du angiver en rigtig e-mail-adresse.
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
Trin 4: Opdater Nginx TLS-certifikater
13. Placeringen af opnåede Lad os kryptere certifikater og nøgler i FreeBSD er /usr/local/etc/letsencrypt/live/www.yourdomain.com/ systemsti. Udsted kommandoen ls for at få vist komponenterne i dit Lad os kryptere certifikat: kædefilen, fullkædefilen, den private nøgle og certifikatfilen, som illustreret i det følgende eksempel.
# ls /usr/local/etc/letsencrypt/live/www.yourdomain.com/
14. For at installere Lad os kryptere certifikater til dit domæne i Nginx-webserveren, skal du åbne Nginx-hovedkonfigurationsfil eller konfigurationsfilen til Nginx TLS-server, hvis det er en separat fil, og ændre nedenstående linjer for at afspejle stien til Lad os kryptere udstedte certifikater som illustreret nedenfor.
# nano /usr/local/etc/nginx/nginx.conf
Opdater følgende linjer for at se ud i denne prøve:
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. Hvis linjen ssl_dhparam er til stede i Nginx SSL-konfiguration, skal du også generere en ny 2048 bit Diffie – Hellman-nøgle med følgende kommando:
# openssl dhparam –out /usr/local/etc/nginx/dhparam.pem 2048
16. Endelig, for at aktivere Nginx TLS-konfiguration, skal du først kontrollere Nginx global konfiguration for mulige syntaksfejl og derefter genstarte Nginx-tjenesten for at anvende SSL-konfigurationen ved at udstede følgende kommandoer.
# nginx -t # service nginx restart
17. Bekræft, om Nginx-dæmonen er bindende for 443-porten ved at udstede følgende kommandoer, der kan vise alle åbnede netværksstik i systemet i lytetilstand.
# netstat -an -p tcp| grep LISTEN # sockstat -4
18. Du kan også besøge din domæneadresse via HTTPS-protokol ved at åbne en browser og skrive følgende adresse for at bekræfte, at Lad os kryptere certifikater fungerer som forventet. Da du bruger certifikater genereret af en gyldig certifikatmyndighed, bør der ikke vises nogen fejl i browseren.
https://www.yourdomain.com
19. Openssl-værktøjet kan også hjælpe dig med at finde oplysninger om et certifikat, der er hentet fra Lad os kryptere CA, ved at køre kommandoen med følgende muligheder.
# openssl s_client -connect www.yourdomain.com:443
Hvis du vil tvinge Nginx til at dirigere alle http til https-anmodninger modtaget for dit domæne på port 80 til HTTPS, skal du åbne Nginx-konfigurationsfil, finde serverdirektivet til port 80 og tilføje nedenstående linje efter servernavn-erklæring som illustreret i nedenstående eksempel .
rewrite ^(.*) https://www.yourdomain.com$1 permanent;
20. Opsætning af automatisk fornyelse af certifikat udstedt af Let's Encrypt-autoritet, før de udløber, kan gøres ved at planlægge et cron-job til at køre en gang om dagen ved at udstede følgende kommando.
# crontab -e
Kronopgave at forny certifikat.
0 0 * * * certbot renew >> /var/log/letsencrypt.log
Det er alt! Nginx kan nu servere sikre webapplikationer til dine besøgende ved hjælp af Lad os kryptere gratis certifikater.